繁体   English   中英

如何将行数据作为列进行透视并在SQL中动态填充数据

[英]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');

我附加所需输出的excel枢轴显示,以更好地显示我想做什么。 极佳的PIVOT设计

不知道这是否适合您,但请尝试一下。(适用于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM