2017-07-08 1 views
0

Ich habe die folgenden drei Tabellen und ich möchte als letzte Tabelle mit einer gespeicherten Prozedur. Kann mir jemand sagen, wie ich mich ihnen anschließen kann?Erstellen Sie Zeile als eine Spalte in der gespeicherten Prozedur

Disc:

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 

Pur:

PurId DiscId 
1  1 
2  2 
3  1 
4  1 

Ich möchte Daten als f zeigen ollows:

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

Antwort

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 

obige Abfrage Versuchen. Hoffe das wird dir helfen.

+0

Es Dynamische Daten von DiscDetail ist, kann ich nicht Fall verwenden, wenn für p, q, r ... – user3405179

+0

@ user3405179 Sie können versuchen, wie unten https://stackoverflow.com/questions/17964078/mysql-query-to-dynamically-convert-rows-to-columns-on-the-basis-of -zweispalten –

+0

Dies ist auch Fix Spalte Ich habe dynamische Spalten. – user3405179

0

Verwendung dynamischer Schwenk:

Zuerst alle Spalten deklarieren:

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,'') 

Erstellen Sie dynamische Dreh:

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) 
Verwandte Themen