创建动态和通用枢轴数据
我想根据TMP表中的内容以更动态的方式创建下面的枢轴数据,而无需硬编码。有什么办法吗?
该结构必须灵活,因为它可以经常更改。
意味着我想根据TMP表中的AGG字段中的内容创建列。目前,表具有三个值 - > “ xx”,“ yy”和“ zz”,因此我需要创建三列。但是在上面的SQL中,我对三列进行了硬编码。由于TMP表也可以具有更多的值,因此必须将其更改为更具动态的实现。因此,我需要创建相应的列。我希望这是可以理解的。
WITH TMP AS
(SELECT 'XX' AS AGG,
50 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
150 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
300 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
25 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
50 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
75 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
500 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
600 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
700 AS VALUE,
2 AS MONTH),
SELECT Month,
MAX(CASE Agg WHEN 'XX' THEN VALUE END) AS XX,
MAX(CASE Agg WHEN 'YY' THEN VALUE END) AS YY,
MAX(CASE Agg WHEN 'ZZ' THEN VALUE END) AS ZZ
FROM TMP
GROUP BY MONTH
I would like to create below pivot data in a more dynamic way based on what is in the TMP table without hard coding it. Is there any way to do that?
The structure has to be flexible since it can change frequently.
Means I would like to create columns based on what is in the AGG field in the TMP table. Currently the table has three values --> 'XX', 'YY' and 'ZZ' hence I need to create three columns. But in the above SQL I hard coded the three columns. This has to be changed to a more dynamic implementation since the TMP table can also have more values. Hence I would need to create corresponding columns. I hope this is somehow understandable.
WITH TMP AS
(SELECT 'XX' AS AGG,
50 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
150 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
300 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
25 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
50 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
75 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
500 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
600 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
700 AS VALUE,
2 AS MONTH),
SELECT Month,
MAX(CASE Agg WHEN 'XX' THEN VALUE END) AS XX,
MAX(CASE Agg WHEN 'YY' THEN VALUE END) AS YY,
MAX(CASE Agg WHEN 'ZZ' THEN VALUE END) AS ZZ
FROM TMP
GROUP BY MONTH
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论