[英]How pivot row data as columns and fill data dynamically in SQL
我有一个表,其列名称为ExDescription,Code,Week00,QtySold 。 Week00列包含诸如Week1,week2,week3,week4等... Week53的值 。
现在,我需要编写一个查询以将Week00值作为列名及其SUM(QtySold)中的值进行打印。 我尝试了以下类似的方法,但是没有得到结果。
select * from week_report1
pivot (SUM (QtySold) for week_00 in ([Week1],
[Week2],
[Week3],
[Week4],
[Week5],
[Week6],
[Week7],
[Week8],
[Week9],
.........
[Week52],
[Week53])) as MaxIn
where Code in ('99');
不知道这是否适合您,但请尝试一下。(适用于MySQL
)
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(week_00 = ''',
week_00,
''', QtySold, 0)) AS `',
week_00, '`'
)
) INTO @sql
FROM week_report1;
SET @sql = CONCAT('SELECT Code, ', @sql, ' FROM week_report1 GROUP BY Code');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Oracle安装程序 :
CREATE TABLE table_name (
ExDescription VARCHAR2(20),
Code INT,
Week00 VARCHAR2(6),
QtySold INT
);
-- Some random data:
INSERT INTO table_name ( ExDescription, Code, Week00, QtySold )
SELECT DBMS_RANDOM.STRING('X',10),
99,
'Week' || LEVEL,
ROUND( DBMS_RANDOM.VALUE(0,101)-0.5)
FROM DUAL
CONNECT BY LEVEL <= 53;
SELECT * FROM table_name;
EXDESCRIPTION CODE WEEK00 QTYSOLD
-------------------- ---------- ------ ----------
V01WLMUC50 99 Week1 74
MT0HLG35FH 99 Week2 53
QSXPKDNDPO 99 Week3 0
...
查询 :
SELECT *
FROM ( SELECT Code, Week00, QtySold FROM table_name WHERE code = 99 )
PIVOT ( SUM( QtySold ) FOR Week00 IN (
'Week1' AS Week1,
'Week2' AS Week2,
'Week3' AS Week3
-- ...
) );
输出量
CODE WEEK1 WEEK2 WEEK3
---------- ---------- ---------- ----------
99 74 53 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.