-4
私は私の問題が重複する可能性の問題よりも少しユニークだと思う次の形式SQLピボット2列は
のテーブルを持っている、と私は201601の繰り返しを取得しようとしています... 2つのメトリックオーダーとコストの201652列。
私は私の問題が重複する可能性の問題よりも少しユニークだと思う次の形式SQLピボット2列は
のテーブルを持っている、と私は201601の繰り返しを取得しようとしています... 2つのメトリックオーダーとコストの201652列。
これは、独自のPIVOT()
機能に依存しないすべてのデータベース(SQL Serverを含む)のアプローチです。しかし、このような例では52週間にわたりこれを行うのはちょっと変わってしまいます(実際には、105の結果の列は実際にレポートを読む人間の利益のために最良の出力ではありません)。 この例では、私は数週間ではなく1年の四半期でそれをやっていると言いましたが、表現を4回ではなく52回繰り返すだけです。 perlやVisual Basicなどを使用して、実際に文を生成することもできます。 は、ここに行く:
-- the input table, don't use in real query ...
WITH
input(id,quarter,orders,cost) AS (
SELECT 1,201601,200,1000
UNION ALL SELECT 1,201602,300,1500
UNION ALL SELECT 1,201603,330,1800
UNION ALL SELECT 1,201604,500,2500
)
-- end of input -
SELECT
id
, SUM(CASE quarter WHEN 201601 THEN orders END) AS "orders_201601"
, SUM(CASE quarter WHEN 201602 THEN orders END) AS "orders_201602"
, SUM(CASE quarter WHEN 201603 THEN orders END) AS "orders_201603"
, SUM(CASE quarter WHEN 201604 THEN orders END) AS "orders_201604"
, SUM(CASE quarter WHEN 201601 THEN cost END) AS "cost_201601"
, SUM(CASE quarter WHEN 201602 THEN cost END) AS "cost_201602"
, SUM(CASE quarter WHEN 201603 THEN cost END) AS "cost_201603"
, SUM(CASE quarter WHEN 201604 THEN cost END) AS "cost_201604"
FROM input
GROUP BY id;
id|orders_201601|orders_201602|orders_201603|orders_201604|cost_201601|cost_201602|cost_201603|cost_201604
1| 200| 300| 330| 500| 1,000| 1,500| 1,800| 2,500
([SQL Server内の 'ピボット' を使用して列に行を変換]の
可能な重複http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot -in-sql-server) – Ben
あなたはどのデータベースを使用していますか? – Taryn
私はSQL Server 12を使用しています – user2827224