sql server complex query
第一个是源表,第二个是目标表,所以在第二个表中通过使用 unpivot 将 12 个月的列转换为单列和 YTD 字段应该自动更新。如果月份名称是 Jan 表示 YTD 字段将仅显示 Jan 数据,如果是 Feb 表示它将添加 Jan 数据和 Feb 数据。如果是 12 月,则相同意味着它将从同一行的 1 月添加到 12 月。
- 最好提供这些输入数据的文本,而不是 Image
- 你试过什么,你的问题是什么?
- 抱歉…我想不出这种要求的任何逻辑。这就是我在 staskoverflow 中发布它的原因。
使用 cross apply(values …) 反透视您的数据:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT
t.[oru code] , t.[bg name] , t.[bu name] , t.[DOMAIN] , t.KPI , t.UoM , t.[YEAR] , t.[ACT/TARGET] , v.[MONTH] , v.KPI , t.[YTD/ITM] FROM t CROSS apply (VALUES (‘Jan’,Jan) ,(‘Feb’,Feb) ,(‘Mar’,Mar) ,(‘April’,April) ,(‘May’,May) ,(‘Jun’,Jun) ,(‘Jul’,Jul) ,(‘Aug’,Aug) ,(‘Sep’,Sep) ,(‘Oct’,Oct) ,(‘Nov’,Nov) ,(‘Dec’,DEC) ) v ([MONTH],KPI) |
看起来你需要做的是 unpivot,如下所示:
1
2 3 4 5 |
SELECT *, [YTD] = SUM(yourYTD calculation COLUMN) OVER(partition BY [OruCode],[YEAR] ORDER BY MONTH) FROM (
SELECT OruCode, BGName —your required columns upto dec FROM table1 t1 CROSS JOIN table2 t2 ) unpivot (KPINo FOR [MONTH] IN ([Jan],[Feb]…) ) p |
- 在 Unpivot 之后,我需要根据月份值更新 YTD 字段。表示累计和。
- 我的意思是,如果月份名称是 jan,它将更新 YTD 列中的 jan 月份值,如果它是 feb,则 YTD 列将更新 Jan 值 feb 值,就像它是 May 比 YTD=jan feb mar apr可能
- 是的,这就是我的查询要做的
只需单独选择所有月份,然后将它们联合起来:
1
2 3 4 5 6 7 |
SELECT [ORU code], [BG Name], YEAR, ‘Jan’ AS [MONTH], [Jan] AS [KPI #], [Jan]
AS [YTD/ITM] FROM source_table UNION ALL SELECT [ORU code], [BG Name], YEAR, ‘Feb’ AS [MONTH], [Feb] AS [KPI #], [Jan]+ [Feb] AS [YTD/ITM] FROM source_table UNION ALL SELECT …. |
你明白了
来源:https://www.codenong.com/44435867/