我有以下数据。
state f_name product paymonth income expense savings
state_1 f1 product_1 apr-2013 5000 1500 3500
state_1 f1 procudt_1 may-2013 4500 3000 1500
state_1 f1 procudt_2 may-2013 4500 3000 1500
state_2 f2 product_2 apr-2013 15000 11500 35000
state_2 f2 product_3 aug-2013 1500 500 1000
使用这样的标题在 paymonth 列上进行透视,这是所需的结果......
state f_name product apr-2013_income apr-2013_expense apr-2013_savings may-2013_income may-2013_expense.....and so on for distinct paymonth
state_1 f1 product_1 5000 1500 3500 4500 3000....and so on....
state_1 f1 product_2 0 0 0 4500 3000....
现在,真正的问题是 state、f_name 和 products 必须保留为列并且它们是动态的。
paymonth 和其他数据也是动态的。
需要使用枢轴。我用谷歌搜索了一些例子,但没有得到我想要的。
这是我尝试过的...
DECLARE @COLS AS NVARCHAR(MAX) = ''
SELECT @COLS = COALESCE(@COLS + ', ', '') + QUOTENAME(PAYMONTH)
FROM #DATA
GROUP BY PAYMONTH, PM ORDER BY PM --pm is last date of paymonth for ordering data in asc/desc
declare @QUERY AS NVARCHAR(MAX) = ''
SET @QUERY = 'SELECT state, product, f_name, ' + @COLS + ' FROM
(
SELECT state, product, f_name, income, paymonth--, expense, saving,
FROM #DATA
) X
PIVOT
(
SUM(income)
FOR paymonth IN (' + @COLS + ')
) P
ORDER BY state, product, f_name'
execute(@query)
这将为收入支付月的支点提供正确的结果,但我不能对所有 3 个收入、费用和储蓄都做到这一点。
尝试过交叉应用和反透视,但失败了。
在这方面需要帮助。谢谢。