【发布时间】:2018-10-24 06:34:31
【问题描述】:
请参阅下面的示例数据和所需的输出格式:
--SAMPLE TABLE
DECLARE @TEMP TABLE(
DATA_DATE DATE,
PROD_ID INT,
CAT_CODE NVARCHAR(10),
DATABUCKET_1 FLOAT,
DATABUCKET_2 FLOAT,
DATABUCKET_3 FLOAT,
DATABUCKET_4 FLOAT,
DATABUCKET_5 FLOAT);
INSERT INTO @TEMP VALUES('19-Oct-2018',100,'C1', 100,200,300,400,500)
SELECT * FROM @TEMP;
--PREFERRED OUTPUT FORMAT
SELECT 'C1' AS CAT_CODE, '19-Oct-2018' AS DATA_DATE, 100 AS UNITS, 'W1' AS WEEK_NUM--FOR DATABUCKET_1, THE DATE REMAINS SAME (AS DATA_DATE)
UNION ALL
SELECT 'C1' AS CAT_CODE, '12-Oct-2018' AS DATA_DATE, 200 AS UNITS, 'W2' AS WEEK_NUM--FOR DATABUCKET_2, THE DATE IS ONE WEEK BEFORE THAT OF W1
UNION ALL
SELECT 'C1' AS CAT_CODE, '05-Oct-2018' AS DATA_DATE, 300 AS UNITS, 'W3' AS WEEK_NUM--FOR DATABUCKET_3, THE DATE IS ONE WEEK BEFORE THAT OF W2
UNION ALL
SELECT 'C1' AS CAT_CODE, '28-Sep-2018' AS DATA_DATE, 400 AS UNITS, 'W4' AS WEEK_NUM--FOR DATABUCKET_4, THE DATE IS ONE WEEK BEFORE THAT OF W3
UNION ALL
SELECT 'C1' AS CAT_CODE, '21-Sep-2018' AS DATA_DATE, 500 AS UNITS, 'W5' AS WEEK_NUM--FOR DATABUCKET_5, THE DATE IS ONE WEEK BEFORE THAT OF W4
补充几点:
- 我的实际表有 106 个数据桶和其他几列。
- 为了简单起见,我在这里只给出了几个。
- 每个月都会收到一个具有不同 DATA_DATE 值的新文件。
- DATA_DATE 值在一个文件中相同,对应DATABUCKET_1
- 对于其他 DATABUCKETS,该值为一周前。
请告诉我如何使用 UNPIVOT 实现这一目标。在此先感谢
【问题讨论】:
标签: sql sql-server tsql transpose unpivot