2016-05-24 6 views
2

私のテーブルには、私はそれがTODOたいodb.OPMdataが重複IDを持つ複数の行を組み合わせ

columns = id, element, budget, month

で、このサンプルSQLクエリはId='1'のみMAXとそのMINにすべての行が表示されていない

です。

SELECT month, MAX(budgetmonth) AS value1, MAX(actual) AS value2, MAX(variance) AS value3, 
     MIN(budgetmonth) AS value4, MIN(actual) AS value5, MIN(variance) AS value6 
FROM OPMdata 
GROUP BY month 

私の問題は、3つ以上の重複する行を1つの行に結合する方法で、値は各列に表示されます。

私はこれを達成したいです。

id | value1 | value2 | value3 | value4 |value5| value 6 | value7 | value8 |val9 

1 | CC | 100 | january | FF | 100 |february | DD | 200 |mar 

など同じidを持つ他の行についても同様です。 これについてお手伝いしていただき、ありがとうございます。

+0

重複はいくつありますか? – sagi

+0

'OPMdata'テーブルからデータのサンプルを追加してください。 – gofr1

+0

@sagi各IDの重複は12個である可能性があります。 –

答えて

0

あなたは正しいものを注文するために、この+月の表のように参加トリプル試すことができます。

;WITH months AS (-- Table with months for ordering 
SELECT DATENAME(month,'1970-01-01') as [month], 1 as [level] 
UNION ALL 
SELECT DATENAME(month,DATEADD(month,[level],'1970-01-01')), [Level]+1 
FROM months 
WHERE [level] < 12 
) 
, results AS (--Temp cte with add of ROW_NUMBERS() 
SELECT id, 
     element, 
     budget, 
     o.[month], 
     ROW_NUMBER() OVER (PARTITION BY Id ORDER BY m.[level]) as rn 
FROM OPMdata o 
LEFT JOIN months m 
    ON m.[month] = o.[month] 
) 
--Final query: 
SELECT TOP 1 WITH TIES 
     r.id, 
     r.element, 
     r.budget, 
     r.[month], 
     r1.element, 
     r1.budget, 
     r1.[month], 
     r2.element, 
     r2.budget, 
     r2.[month] 
FROM results r 
LEFT JOIN results r1 
    ON r.id = r1.id and r.rn = r1.rn-1 
LEFT JOIN results r2 
    ON r1.id = r2.id and r1.rn = r2.rn-1 
ORDER BY r.rn 

出力:

id element budget month element budget month  element budget month 
1 CC  100  january FF  100  february DD  200  march 
2 SS  150  june NULL NULL NULL  NULL NULL NULL 

EDIT:

ビューを作成したい場合このクエリを使用できます:

CREATE VIEW ViewNameHere 
AS 
    WITH months AS (-- Table with months for ordering 
    SELECT DATENAME(month,'1970-01-01') as [month], 1 as [level] 
    UNION ALL 
    SELECT DATENAME(month,DATEADD(month,[level],'1970-01-01')), [Level]+1 
    FROM months 
    WHERE [level] < 12 
    ) 
    , results AS (--Temp cte with add of ROW_NUMBERS() 
    SELECT id, 
      element, 
      budget, 
      o.[month], 
      ROW_NUMBER() OVER (PARTITION BY Id ORDER BY m.[level]) as rn 
    FROM OPMdata o 
    LEFT JOIN months m 
     ON m.[month] = o.[month] 
    ) 
    --Final query: 
    --every column with unique name 'value*' 
    SELECT TOP 1 WITH TIES 
      r.id  as value1, 
      r.element as value2, 
      r.budget as value3, 
      r.[month] as value4, 
      r1.element as value5, 
      r1.budget as value6, 
      r1.[month] as value7, 
      r2.element as value8, 
      r2.budget as value9, 
      r2.[month] as value10, 
    FROM results r 
    LEFT JOIN results r1 
     ON r.id = r1.id and r.rn = r1.rn-1 
    LEFT JOIN results r2 
     ON r1.id = r2.id and r1.rn = r2.rn-1 
    ORDER BY r.rn 
+0

こんにちは、@ gofr1私はそれとその作品をテストしました。あなたの優れたクエリに感謝します。 –

+0

私はsqlのstudionを使用してあなたのクエリを実行すると、それはエラーです。エラーは次のとおりです:グリッドペインとダイアグラムペインにSQLテキストを表示することはできません。 –

+0

私はあなたがビューを作成しようとしていると思います。私は正しい? – gofr1

関連する問題