2016-12-01 1 views
0

私は2つの識別カラム、日付、および値を含むテーブルを持っています。この値は最大100にすることができます。私がしたいのは、[ID]と[日付]が後続の行全体で同じで、値が100未満です(これは[ID_SECONDARY]が常に異なることを意味します)。これらの値のそれぞれを、[[VALUE_1] ... [VALUE_N]]列に値の説明([ID_SECONDARY] - > [VALUE_1_DESC] ... [VALUE_N_DESC])とともに配置します。最終的に各行には、[ID]、[日付]、および[VALUE_1] ... [VALUE_N]の値と共にさまざまな[ID_SECONDARY]記述の集約が含まれている必要があります。一意の[ID_SECONDARY]の数は4を超えませんが、1から4までです。値が指定された値未満の場合、行の値を追加の事前定義フィールドに転記します。

私の最初の傾向は、カーソルを使用してこれに近づくことですが、より良い選択肢があることを期待しています。

最初の画像はテーブルに表示された情報のサンプルで、2番目の画像は私が探している画像です。どんな助けでも大歓迎です。

enter image description here

enter image description here

これまでのさまざまな動的ピボット・ポストとは異なり、列はセカンダリIDとは独立しており、VALUE列に完全に依存しているため、値自体が列1- 4。

+0

を試してみてください?それは確かに達成することができますが、他のどこかで最もよく扱われる何かをしようとしているようです。 – iamdave

+0

データのユーザーは、指定された任意のIDの特定の日付のIDと値を表示するために、単一行表示を優先します。彼らは、各IDの複数の行が厄介で難しく、クエリをナビゲートしたり書き込んだりすることが困難であることがわかります。 – RyanL

+0

[SQL Server動的PIVOTクエリの可能な重複?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) – Matt

答えて

1

は、このようにデータをフォーマットすることを目的とは何か、この

WITH a AS (
    SELECT 
     ID 
     , [DATE] 
     , ID_SECONDARY 
     , VALUE 
     , ROW_NUMBER() OVER (PARTITION BY ID, DATE ORDER BY ID) AS RNUM 
) 
SELECT 
    a.ID 
    , a.[DATE] 
    , MAX (
     CASE a.RNUM 
      WHEN 1 THEN a.VALUE 
      ELSE NULL 
    ) AS VALUE_1 
    , MAX (
     CASE a.RNUM 
      WHEN 1 THEN a.ID_SECONDARY 
      ELSE NULL 
    ) AS VALUE_1_DESC 
    , MAX (
     CASE a.RNUM 
      WHEN 2 THEN a.VALUE 
      ELSE NULL 
    ) AS VALUE_2 
    , MAX (
     CASE a.RNUM 
      WHEN 2 THEN a.ID_SECONDARY 
      ELSE NULL 
    ) AS VALUE_2_DESC 
    , MAX (
     CASE RNUM 
      WHEN 3 THEN a.VALUE 
      ELSE NULL 
    ) AS VALUE_3 
    , MAX (
     CASE RNUM 
      WHEN 3 THEN a.ID_SECONDARY 
      ELSE NULL 
    ) AS VALUE_3_DESC 
    , MAX (
     CASE RNUM 
      WHEN 4 THEN a.VALUE 
      ELSE NULL 
    ) AS VALUE_4 
    , MAX (
     CASE RNUM 
      WHEN 4 THEN a.ID_SECONDARY 
      ELSE NULL 
    ) AS VALUE_4_DESC 
FROM a 
GROUP BY a.ID, a.[DATE] 
+1

ブリリアント、ありがとう@DVT。後続の[ID_SECONDARY]の最初の結果が間違った列に置かれているので、row_numberパーティションを[DATE] FROM [ID_SECONDARY]に変更しました。 – RyanL

+0

ええ、私はそれを見落としました。ありがとうございました。 – DVT

関連する問題