當執行這個MSSQL陳述句時,它迫使我在group by欄位中添加CASE WHEN欄位History.Email,然而我需要只在一個日期欄位上分組。 有什么辦法可以解決這個問題嗎?(sql 2008)
SELECT TOP (100)
convert(varchar, VisitDate, 111) as Date,
SUM(AmountLoaded) as Loaded,
CASE when History.Email is null then
SUM(AmountCash)
else SUM(AmountToPay)
end AS總計。
CASE when History.Email is null then
0
else SUM(AmountToPay)
end AS App,
SUM(AmountToPay) AS Consumed
FROM dbo.History
GROUP BY convert(varchar, VisitDate, 111)
order by 1 desc
uj5u.com熱心網友回復:
根據定義,任何非聚合欄位都應該在group by子句中。你可以這樣寫:
SELECT TOP (100)
convert(varchar, VisitDate, 111) as Date,
SUM(AmountLoaded) as loadeded,
SUM(CASE when History.Email isnull)
then AmountCash
else AmountToPay end) AS總計。
SUM(CASE when History.Email is null)
則 0
else AmountToPay
end) AS App,
SUM(AmountToPay) AS Consumed
FROM dbo.History
GROUP BY convert(varchar, VisitDate, 111)
order by 1 desc
uj5u.com熱心網友回復:
當執行條件聚合時,你需要把整個 CASE運算式放在一個聚合中,而不僅僅是你想要聚合的運算式:
SELECT TOP (100)
CONVERT(varchar(10), H.VisitDate, 111) AS [Date], --總是為你的資料型別指定一個長度/精度/規模。
SUM(H.AmountLoaded) AS 已加載。
SUM(CASE WHENH. Email IS NULL THEN H.AmountCash ELSE H.AmountToPayEND) AS 總計。
SUM(CASE WHEN H.. Email IS NULL THEN 0 ELSE H.. AmountToPay END) AS App,
SUM(H.AmountToPay) AS Consumed
FROM dbo.History H
GROUP BY CONVERT(varchar(10),H. VisitDate, 111) --總是為你的資料型別指定一個長度/精度/尺度。
ORDER BY [Date] DESC; --要具體,不要使用序數位置。
另外,我建議不要在查詢中把你的列VisitDate轉換為varchar。如果你想以特定的格式顯示資料,那么這是你的表現層要做的事情,而不是RDBMS。幸運的是,由于樣式111是yyyy/MM/dd,所以資料的順序不受影響。然而,如果你想簡單地截斷你的值的時間部分,請將其轉換為date,以便該值繼續保持強型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314796.html
標籤:
下一篇:sql中的條件選擇
