簡體   English   中英

SQL CASE IF [VALUE]當[Value]和[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM