我有一個原本運行良好的SQL代碼,但後來我不得不向一個CASE添加一個新項目,現在我的GROUP BY將不會像以前一樣完全組合在一起,並且它搞亂了我的計算。我甚至不想按照完成的日期進行分組,只是出現這種情況,但如果我沒有在那裏,我的代碼就會爆炸。SQL不會GROUP BY完全
編輯︰原始代碼工作很好,但我不得不添加完成的日期,所以我可以添加一個CASE,然後它錯誤,如果我不將它添加到GROUP BY,所以我添加它,現在它doesn按照原始代碼的方式進行分組。 這段代碼的功能是從其他表中獲取一堆信息,它計算出某人欠多少錢,多少人付錢並吐出差異。
原代碼
INSERT INTO #ThisReportAll (CustomerID,Year,OverdueBalance,YearSetupId)
SELECT t.CustomerId, ys.Name AS Year,SUM(t.TtlSpeciesCost) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0)
AS TtlOwnerCost, t.YearSetupId AS YearSetupId
FROM #TotalAnimalCostAll t
LEFT JOIN #CustomerPaymentsAll cp ON t.CustomerId=cp.CustomerID
LEFT JOIN YearSetup ys ON t.YearSetupId = ys.YearSetupId
LEFT JOIN #BalanceAdjustmentsAll ba ON t.CustomerId=ba.CustomerID
GROUP BY t.CustomerId,ys.Name,cp.TtlPayments, ba.Amount, t.YearSetupId
新代碼不起作用所有的路
INSERT INTO #ThisReportAll (CustomerID,Year,OverdueBalance,YearSetupId)
SELECT t.CustomerId, ys.Name AS Year,
CASE
WHEN SUM(t.TtlSpeciesCost) < 5 AND t.Complete < CONVERT(DATE,'01-01-2017')
THEN (5) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0)
ELSE SUM(t.TtlSpeciesCost) - Isnull(cp.TtlPayments,0) + Isnull(ba.Amount,0)
END
AS TtlOwnerCost, t.YearSetupId AS YearSetupId
FROM #TotalAnimalCostAll t
LEFT JOIN #CustomerPaymentsAll cp ON t.CustomerId=cp.CustomerID
LEFT JOIN YearSetup ys ON t.YearSetupId = ys.YearSetupId
LEFT JOIN #BalanceAdjustmentsAll ba ON t.CustomerId=ba.CustomerID
GROUP BY t.CustomerId,ys.Name,cp.TtlPayments, ba.Amount, t.YearSetupId, t.Complete
我建議你解釋代碼應該做什麼。樣本數據和預期結果可以提供幫助。非工作代碼並不一定能很好地傳達意圖。 –
呃...你把t.Complete添加到了你的組中。所以它不會是相同的分組... –
您的SELECT列表達式中的CASE不能影響同一個SELECT中的GROUP BY(除非GROUP BY已被編輯)。在這種情況下,您編輯了「GROUP BY」,這是改變它的行爲。 – RBarryYoung