2017-07-08 13 views
0

私は次の3つのテーブルを持っており、私はストアドプロシージャを使用して最後のテーブルにしたい。どのように私はそれらに参加することができます誰も教えてくれますか?ストアドプロシージャの列として行を作成

ディスク

DiscId DiscName 
1   a 
2   b 
3   c 

DiscDetail

DiscDetailId DiscId DiscDetailName Percentage 
1    1  p    5 
2    1  q    10 
3    2  r    12 
4    2  s    11 
5    2  t    13 
6    3  u    19 
7    3  v    20 

ピュール

PurId DiscId 
1  1 
2  2 
3  1 
4  1 

私はFなどのデータを表示したいですollows:

PurId p q r s t 
1  5 10 
2    12 11 13 
3  5 10 
4  5 10 

答えて

0
SELECT PurId , 
CASE WHEN DD.DiscDetailName ='P' THEN DD.Percentage END 'P', 
CASE WHEN DD.DiscDetailName ='q' THEN DD.Percentage END 'q', 
CASE WHEN DD.DiscDetailName ='r' THEN DD.Percentage END 'r', 
CASE WHEN DD.DiscDetailName ='s' THEN DD.Percentage END 's', 
CASE WHEN DD.DiscDetailName ='t' THEN DD.Percentage END 't' 
FROM 
(
SELECT * FROM DISC_DETAIL D 
INNER JOIN CHILD_TABLE CT ON DD.DiscId =CT.DiscId 
)DD 

は、クエリの上に試してみてください。 これがあなたを助けてくれることを願っています。

+0

を、私は、pのためのケースを使用することはできませんDiscDetailの動的なデータがあり、 q、r ... – user3405179

+0

@ user3405179以下のように試すことができますhttps://stackoverflow.com/questions/17964078/mysql-query-to-dynamically-convert-rows-to-columns-on-the-basis-of -two-columns –

+0

これは修正カラムです。私は動的な列を持っています。 – user3405179

0

ダイナミックピボット用途:

最初にすべての列を宣言:

DECLARE @Columns AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX); 

    SET @Columns = STUFF((SELECT distinct ',' + QUOTENAME(c.DiscDetailName ) 
       FROM DiscDetail c 
       FOR XML PATH(''), TYPE 
       ).value('.', 'NVARCHAR(MAX)') 
      ,1,1,'') 

は、動的なピボットを作成します。

set @query = 'SELECT PurId, ' + @Columns + ' from 
       (
        select Pur.PurId 
         , DiscDetail.Percentage 
         , DiscDetail.DiscDetailName 
        from Pur 
        inner join Disc on Pur.DiscID = Disc.DiscId 
        inner join DiscDetail on DiscDetail.ID = Disc.DiscId 
       ) x 
       pivot 
       (
        max(Percentage) 
        for DiscDetailName in (' + @Columns + ') 
       ) p ' 


    execute(@query) 
関連する問題