![](/img/trans.png)
[英]SQL Case when at least one value equals value then set to value
[英]SQL CASE IF [VALUE] WHEN [Value] AND [VALUE] THEN
我不確定我是否過於復雜這么小的任務,但如果有人能幫助我一點正確的方向,那將是值得贊賞的。
我有兩個具有相同字段的表,我創建了一個視圖,將這兩個值合並為一個。
正如我所說的那樣:
SELECT TOP 1000 [Name]
,[WorkOrder]
,[OnSiteStarted]
,[OnSiteSubmitted]
FROM [DBName].[dbo].[sw_onsite_offsite]
ORDER BY WorkOrder
結果集以(代碼段)形式出現:
Name WorkOrder OnSiteStarted OnSiteSubmitted
On-Site 23022017 2017-02-23 20:31:49.000 2017-02-23 20:33:47.000
Off-Site 35 2017-02-15 18:32:26.000 2017-02-15 21:11:04.000
On-Site 64169086 2017-02-22 11:42:40.000 2017-02-22 15:10:17.000
Off-Site 91487689 2017-02-11 13:48:11.000 2017-02-11 14:32:37.000
On-Site 91494707 2017-02-13 14:39:42.000 2017-02-13 14:49:03.000
Off-Site 92810031 2017-02-17 09:30:59.000 2017-02-17 09:58:19.000
On-Site 92810031 2017-02-17 09:00:12.000 2017-02-17 09:30:48.000
Off-Site 92810034 2017-02-17 10:01:27.000 2017-02-17 10:24:45.000
On-Site 92810039 2017-03-03 12:33:41.000 2017-03-03 12:52:37.000
Off-Site 92810039 2017-03-03 12:44:52.000 2017-03-03 13:41:35.000
我所追求的最終結果是:當Off-Site和On-Site表單具有相同的WorkOrder編號時,它將僅顯示它們與DATEDIFF(MINUTES,[onsitesubmitted],[offsitesubmitted]字段一起顯示。
CASE聲明會以某種方式適用於此,還是會成為別的?
我想你想要一個自我加入:
select t1.WorkOrder,
DATEDIFF(MINUTES, t1.onsitesubmitted, t2.OnSiteSubmitted) diff
from [DBName].[dbo].[sw_onsite_offsite] t1
join [DBName].[dbo].[sw_onsite_offsite] t2 on t1.WorkOrder = t2.WorkOrder
where t1.name = 'On-Site'
and t2.name = 'Off-Site'
這僅返回那些異地和現場都具有相同WorkOrder的行。 如果您希望它產生結果,即使不匹配,也可以使用適當的外連接。
SELECT onsite.[WorkOrder],
DATEDIFF(MINUTES, onsite.OnSiteSubmitted, offsite.OnSiteSubmitted)
FROM [DBName].[dbo].[sw_onsite_offsite] onsite join [DBName].[dbo].[sw_onsite_offsite] offsite on onsite.WorkOrder = offsite.WorkOrder
WHERE onsite.Name = 'On-Site' AND
offsite.Name = 'Off-Site'
ORDER BY WorkOrder
如果您的數據庫支持它,您可以使用lead()
或lag()
窗口函數(您沒有標記數據庫,但它看起來像sql-server)
select
Name
, WorkOrder
, OnSiteStarted
, OnSiteSubmitted
, datediff(minute
, lead([onsitesubmitted]) over (
partition by WorkOrder
order by Name
)
, [onsitesubmitted]
) as Duration
from [dbo].[sw_onsite_offsite]
order by WorkOrder, OnSiteSubmitted
sql server中的rextester演示: http ://rextester.com/OTNS68646
收益:
+----------+-----------+---------------------+---------------------+----------+
| Name | WorkOrder | OnSiteStarted | OnSiteSubmitted | Duration |
+----------+-----------+---------------------+---------------------+----------+
| Off-Site | 35 | 2017-02-15 18:32:26 | 2017-02-15 21:11:04 | NULL |
| On-Site | 23022017 | 2017-02-23 20:31:49 | 2017-02-23 20:33:47 | NULL |
| On-Site | 64169086 | 2017-02-22 11:42:40 | 2017-02-22 15:10:17 | NULL |
| Off-Site | 91487689 | 2017-02-11 13:48:11 | 2017-02-11 14:32:37 | NULL |
| On-Site | 91494707 | 2017-02-13 14:39:42 | 2017-02-13 14:49:03 | NULL |
| On-Site | 92810031 | 2017-02-17 09:00:12 | 2017-02-17 09:30:48 | NULL |
| Off-Site | 92810031 | 2017-02-17 09:30:59 | 2017-02-17 09:58:19 | 28 |
| Off-Site | 92810034 | 2017-02-17 10:01:27 | 2017-02-17 10:24:45 | NULL |
| On-Site | 92810039 | 2017-03-03 12:33:41 | 2017-03-03 12:52:37 | NULL |
| Off-Site | 92810039 | 2017-03-03 12:44:52 | 2017-03-03 13:41:35 | 49 |
+----------+-----------+---------------------+---------------------+----------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.