2016-06-28 66 views
0

我有一個列名稱列表ExDescription,Code,Week00,QtySold。列星期00包含的值如第1周,第2周,第3周,第4周等......第53周如何將行數據作爲列以SQL動態填充數據

現在,我需要編寫一個查詢來打印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旋轉顯示,以獲得我想要做的更好的照片。 EXCEL PIVOT DESIGN

+0

你使用MySQL或ORACEL(PLSQL),還是其他什麼東西? – jarlh

+0

我正在使用Orace(plsql) –

回答

1

甲骨文設置

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 
1

不知道這是否適用於你或沒有,但嘗試它(它是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; 
+0

很好的答案 - +1 - 但是你也必須在AS之後用反引號退出week_00。當特殊的字符在像空格,它給出了一個錯誤 –

+0

感謝您的答覆,但我正在與Oracle SQL –

+0

@BerndBuffen正確,更新的答案。 – Blank