0

私は2つのテーブルを持っています 1. #SetValuesTable2.#labelTempTab

のデータは次の#SetValuesTableようになります。

MNUM      la1   la2     la3   la4    PropertyType 
12         1     0      2             s
13         4     0      5      7      p

のデータは次の#labelTempTabようになります。

RowNum  Label Title PropertyType  
 1      la1  Agent1    s
 2      la2  Agent2    s
 3      la3  Agent3    s
 4      la1  Agent1    p
 5      la2  Agent2    p
 6      la3  Agent3    p
 7      la4  Agent4    p

次のような結果テーブルが必要です。

MNUM LabelName LabelValue   PropertyType 
 12    la1       1               s
 12    la2       0               s
 12    la3       2               s
 13    la1       4               p
 13    la2       0               p
 13    la3       5               p
 13    la4       7               p

クエリ:

  SELECT MNUM, LabelName , LabelValue  FROM #SetValuesTable 
     CROSS APPLY ( VALUES '
     stuff(( SELECT ',('''+ replace(C.label,'''','"') + ''',' + quotename(C.label) + ')'   FROM #labelTempTab c group by label FOR xml path('')), 1, 1, '')
         ) AS UPTab (Label , LabelValue);

上記のクエリの結果は次のようになります。

MNUM LabelName LabelValue    
 12    la1       1               
 12    la2       0               
 12    la3       2               
 13    la1       4               
 13    la2       0               
 13    la3       5               
 13    la4       7  

残りの列も取得するのを手伝ってくれる人がいますか。

注 : UNPIVOT を使用してテーブルを unpiovt しようとしましたが、パフォーマンスはあまり良くありません。クロス適用を使用すると、パフォーマンスは非常に優れています。

4

1 に答える 1

0

でこれを行うことができますjoin

select st.MNUM, lt.LabelName,
       (case when lt.LabelName = 'la1' then la1
             when lt.LabelName = 'la2' then la2
             when lt.LabelName = 'la3' then la3
             when lt.LabelName = 'la4' then la4    
        end) as LabelValue,
       st.PropertyType 
from #labelTempTab lt join
     #SetValuesTable st
     on st.mnum = lt.label
于 2015-01-27T20:06:25.960 に答える