2017-07-08 40 views
0

我有以下三個表,我希望使用存儲過程作爲最後一個表。誰能告訴我如何加入他們?在存儲過程中創建行作爲列

光盤

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

有DiscDetail的動態數據,我不能當p使用案例, q,r ... – user3405179

+0

@ user3405179您可以嘗試根據以下內容https://stackoverflow.com/questions/17964078/mysql-query-to-dynamically-convert-rows-to-columns-on-the-basis-of - 兩列 –

+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)