2017-03-08 103 views
1

我不知道我是否過於複雜這樣一個小任務,但如果任何人都可以在正確的方向幫助我一點,那麼將不勝感激。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 

最終的結果,我以後是:當場外和現場表格具有相同的WorkOrder編號,這將只顯示它們與DATEDIFF(MINUTES,[onsitesubmitted],[offsitesubmitted]字段一起顯示。

將CASE語句應用於我不知怎的,或者它會成爲別的東西?

+0

,你能否告訴我們渴望Desir ed輸出? – Forklift

+0

您正在使用哪些DBMS? –

回答

1

我想你想自連接:

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' 

這回只具有存在兩個非現場和現場工作單相同的行。如果您希望它甚至在不匹配的情況下生成結果,則可以使用適當的外連接。

1
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 
1

如果你的數據庫支持的話,您可以使用lead()lag()窗函數(你有沒有標記的數據庫,但它看起來像SQL服務器)

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 

rextester演示在SQL Server中: 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  | 
+----------+-----------+---------------------+---------------------+----------+ 
相關問題