sql server 复杂查询

sql server complex query

SQL

第一个是源表,第二个是目标表,所以在第二个表中通过使用 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 ....

你明白了


以上是sql server 复杂查询的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>