簡體   English   中英

計算sql中的值總和(Distinct / Case語句)

[英]calculate sum of values in sql (Distinct/Case Statement)

我想建立一個SQL查詢,該查詢將消除重復的值DISTINCT然后Sum然后將列值打印為標題並獲得結果

樣本數據 :-

ID  TYPE    Values
A   FLM     00:34:09
A   FLM     16:03:19
A   SLM     00:37:48
B   FLM     00:42:47
B   SLM     01:14:56
C   SLM     01:00:52
C   SLM     00:37:48

我想為每個ID做相同TYPE Sum of Values然后根據Type顯示

預期產量:

ID  FLM         SLM
A   16:37:28    00:37:48
B   00:42:47    01:14:56
C   NULL        01:38:40

我得到什么

ID  FLM         SLM
A   01:38:40    NULL
A   NULL        00:37:48
B   00:42:47    NULL
B   NULL        01:14:56
C   NULL        01:38:40

在這里,我可以對每種類型進行求和,但結果顯示在兩行中,而不是單行。

我的查詢:

Select Distinct ID
    CASE 
        When Type='SLM' 
        Then    STR(SUM(DateDiff(s,[Start Date],[End Date]))/3600) + 
                RIGHT(CONVERT(char(8),DATEADD(s,SUM(DateDiff(s,[Start Date],[End Date])),0),108),6)
    End[FLM],
    CASE    
        When Type='SLM' 
        Then    STR(SUM(DateDiff(s,[Start Date],[End Date]))/3600) + 
                RIGHT(CONVERT(char(8),DATEADD(s,SUM(DateDiff(s,[Start Date],[End Date])),0),108),6)
    End[SLM],

From #_TicketType GROUP BY ID,Type

PS使用數據類型為DateTime [Start Date],[End Date]列我正在獲取樣本數據表中的列Values

(已更新), group by從您的group by刪除Type ,然后將CASE移到SUM內,如下所示:

Select ID,
    STR(SUM(CASE Type WHEN 'FLM' THEN DateDiff(s,[Start Date],[End Date]) END)/3600) +
    RIGHT(CONVERT(char(8),DATEADD(s,SUM(CASE Type WHEN 'FLM' THEN DateDiff(s,[Start Date],[End Date]) END),0),108),6) [FLM],
    STR(SUM(CASE Type WHEN 'SLM' THEN DateDiff(s,[Start Date],[End Date]) END)/3600) +
    RIGHT(CONVERT(char(8),DATEADD(s,SUM(CASE Type WHEN 'SLM' THEN DateDiff(s,[Start Date],[End Date]) END),0),108),6) [SLM]
From #_TicketType 
GROUP BY ID

在整個CASE表達式上使用SUM()函數

SELECT ID,
    STR(SUM(CASE WHEN Type = 'FLM' 
                 THEN DATEDIFF(s,[Start Date],[End Date]) 
            END) /3600) +
    RIGHT(CONVERT(char(8),DATEADD(s, SUM(CASE WHEN Type = 'FLM' 
                                   THEN DATEDIFF(s,[Start Date],[End Date]) END),0)
                              ,108),6) AS [FLM],                                  
    STR(SUM(CASE WHEN Type = 'SLM' 
                 THEN DATEDIFF(s,[Start Date],[End Date])
            END)) /3600 + 
    RIGHT(CONVERT(char(8),DATEADD(s, SUM(CASE WHEN Type = 'SLM' 
                                   THEN DATEDIFF(s,[Start Date],[End Date]) END),0)
                              ,108),6) AS [SLM]
FROM #_TicketType 
GROUP BY ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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