2016-06-28 2 views
0

列名がの表があります。説明、コード、週00、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 PIVOT DESIGN

+0

あなたが他のMySQLまたはOracel(PLSQL)、または何かを使用していますか? – jarlh

+0

私はOrace(plsql) –

答えて

1

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 
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の後にbackticksとweek_00をエスケープする必要があります。スペースのような特殊文字の場合は、エラーが返されます –

+0

返信ありがとうございますが、Oracle SQLで作業しています –

+0

@BerndBuffen右の更新済みの回答。 – Blank

関連する問題