2015-11-19 56 views
2

我有一個數據集,我想按客戶代碼進行分組,我希望將每個日期之間的總和交易總和計算在一起,並且每月成爲一個單獨的專欄。我可以使這種動態我主要關心的是構建初始選擇輸出所需的數據。我怎樣才能按日期劃分分組數據

我有什麼:

SELECT [cmasterno] 
    ,CASE 
     WHEN Month([dtrs]) = 1 
      AND Year([dtrs]) = YEAR(GETDATE()) 
      THEN SUM([nftrsamt]) 
     END AS 'Jan 2014' 
    ,CASE 
     WHEN Month([dtrs]) = 2 
      AND Year([dtrs]) = YEAR(GETDATE()) 
      THEN SUM([nftrsamt]) 
     END AS 'Feb 2014' 
FROM [AccountMate].[dbo].[gltrsn] 
WHERE csource LIKE 'AR' 
    AND cacctid LIKE '%4220%' 
GROUP BY cmasterno 

數據的樣本將

cmasterno dtrs ntrsamt 
CEN01-A 1/24/2014 -22.2 
AUT129-A 2/24/2014 -0.84 
CEN01-A 1/22/2014 -19.86 
CEN01-A 2/22/2014 -13.2 
AUT129-A 1/22/2014 -18.42 
AUT129-A 1/22/2014 -1 
AUT129-A 2/22/2014 -316.56 
CEN01-A 2/21/2014 -2.04 

回答

2

使用條件SUM

SELECT [cmasterno], 
     SUM (CASE 
       WHEN Month([dtrs]) = 1 AND Year([dtrs]) = YEAR(GETDATE()) 
        THEN [nftrsamt] 
       ELSE 0 
      END 
      ) AS 'Jan 2014', 
     SUM (CASE 
       WHEN Month([dtrs]) = 2 AND Year([dtrs]) = YEAR(GETDATE()) 
        THEN [nftrsamt] 
       ELSE 0 
      END 
      ) AS 'Feb 2014' 
FROM [AccountMate].[dbo].[gltrsn] 
WHERE csource LIKE 'AR' 
    AND cacctid LIKE '%4220%' 
GROUP BY cmasterno 
+0

看起來像這將工作測試,我讓你知道。謝謝 !!我沒有想到將這筆款項轉移到案件之外! –

+0

應該工作。不要擔心你必須在途中學習這些東西。你可以用'COUNT()'或者'AVG()'做同樣的工作。 –

+0

Yup像夢一樣工作謝謝 –

1

只是要完成你可以加入也做到這一點

SELECT [cmasterno], sum(jan.nftrsamt) as 'Jan 2014', sum(feb.nftrsamt) as 'Feb 2014' 
FROM [AccountMate].[dbo].[gltrsn] b 
LEFT JOIN [AccountMate].[dbo].[gltrsn] jan on b.cacctid = jan.cacctid and Month(jan.[dtrs]) = 1 AND Year(jan.[dtrs]) = YEAR(GETDATE()) 
LEFT JOIN [AccountMate].[dbo].[gltrsn] feb on b.cacctid = feb.cacctid and Month(feb.[dtrs]) = 2 AND Year(feb.[dtrs]) = YEAR(GETDATE()) 
WHERE csource LIKE 'AR' AND cacctid LIKE '%4220%' 
GROUP BY cmasterno 

根據您的索引,聯接可以比案例快得多。這是O(1)而不是O(N)

+0

同樣一個很好的方法謝謝 –