[英]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.