我有一個名為 PYMT 的付款表,如果可能的話,我試圖使用 PIVOT 來繞開我的腦袋,以獲得對輸出的某種安排,并且對如何做到這一點感到困惑。表中有 pymt_amount 和 pymt_date (也有其他列,但不是必需的)。我希望看到輸出看起來像這樣:
PayMonth 2007 2008 2009 2010 2011
1 26044.12 82663.79 83583.17 35963.49 100865.94
2 60145.61 35245.06 19173.08 14417.98 21502.71
3 68138.88 88670.16 85319.66 40850.39 31595.43
4 228835.04 215258.84 157905.56 136551.46 166027.30
5 395877.88 348307.58 348506.09 363460.24 298488.22
6 618013.05 662869.88 522233.48 472174.95 385879.94
7 557751.27 363659.66 305363.68 304606.98 349173.75
8 355639.91 173107.60 266235.54 147731.54 251878.49
9 131440.63 173338.90 133869.36 140035.13 109595.83
10 168148.90 127356.25 114818.69 119082.52 139201.50
11 139543.35 138151.22 128667.58 137351.77 107807.27
12 142286.06 136670.64 116980.04 69609.22 85670.84
要獲得付款總額的第一列很容易 - 我無法弄清楚其他年份的情況 - 我知道如何制作基本的 PIVOT 表。
前 2 列的查詢是
SELECT DATEPART(MM, pymt_Date) AS PayMonth, SUM(pymt_Amount) AS [2007]
FROM PYMT
GROUP BY DATEPART(MM, pymt_Date) , DATEPART(YY, pymt_Date)
HAVING (DATEPART(YY, pymt_Date) = 2007)
ORDER BY PayMonth
如何添加其他年份(每個 payMonth 是當月所有付款的總和),但我不希望按月旋轉(只是按月顯示的年份,如輸出中所示)
我可以每月在游標中運行一個單獨的查詢這是一個示例,但顯示了當年的總計(但需要按月分隔)
SELECT * FROM
(SELECT DATEPART(yy, pymt_Date) AS PayYear, pymt_Amount
FROM PYMT
) tbl1
PIVOT
(SUM(pymt_Amount)
FOR
PayYear in ([2007],[2008],[2009],[2010],[2011])
) tbl2
產生
2007 2008 2009 2010 2011
2891864.70 2545299.58 2282655.93 1981835.67 2047687.22
如您所見 - 這沒有按月行細分
有任何想法嗎?
uj5u.com熱心網友回復:
DATEPART(month, pymt_Date) AS PayMonth您在 tbl1 查詢中錯過了這一點。
完整的查詢應該是
SELECT *
FROM
(
SELECT DATEPART(year, pymt_Date) AS PayYear,
DATEPART(month, pymt_Date) AS PayMonth,
pymt_Amount
FROM PYMT
) tbl1
PIVOT
(
SUM(pymt_Amount)
FOR PayYear in ([2007],[2008],[2009],[2010],[2011])
) tbl2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441790.html
