2017-01-30 2 views
2

Ich bin ein Neuling in SQL-Sprache und brauche etwas Hilfe, um Daten neu anzuordnen.Alternative zum Pivot

(Ich arbeite mit SQL Server 2008)

Ich habe diese Tabelle (Ersatz):

 
iteid | substitutedescr | substitutecode 
37664 | EANCUTIE3  | 14902778788926 
37664 | EAN1    | 4902778788929 
37664 | EANCUTIE1  | 4902778931653 
37664 | EANCUTIE2  | 4902778931738 

und ich möchte ein wählen wie folgt aussehen:

 
iteid EAN1   EANCUTIE1   EANCUTIE2  EANCUTIE3 
37664              14902778788926 
37664 4902778788929   
37664     4902778931653  
37664          4902778931738 

I versucht, Pivot zu verwenden:

select * 
from (
      select iteid as [ID], substitutedescr as [descr], substitutecode  as [Values] 
      from substitute) as s 
PIVOT 
(
SUM(SUBSTITUTECODE) 
FOR [DESCR] in (ean1, ean2, ean3, eancutie1, eancutie2, eancutie3) 
) as pvt 

Aber anscheinend muss ich den Kompatibilitätsgrad auf einen höheren Wert setzen, um die Pivot-Funktion zu aktivieren.

Ich habe andere Alternative, um dieses Ergebnis zu erhalten?

Vielen Dank.

Antwort

5

Sie brauchen nicht pivot dafür, nur case:

select iteid, 
     (case when substitutedescr = 'EAN1' then substitutecode end) as EAN1, 
     (case when substitutedescr = 'EANCUTIE1' then substitutecode end) as EANCUTIE1, 
     (case when substitutedescr = 'EANCUTIE2' then substitutecode end) as EANCUTIE2, 
     (case when substitutedescr = 'EANCUTIE3' then substitutecode end) as EANCUTIE3 
from substitute; 

Sie würden wollen pivot (oder Aggregation), wenn Sie pro iteid mit allen Werten in dieser Zeile eine Zeile wollte. Zum Beispiel:

select iteid, 
     max(case when substitutedescr = 'EAN1' then substitutecode end) as EAN1, 
     max(case when substitutedescr = 'EANCUTIE1' then substitutecode end) as EANCUTIE1, 
     max(case when substitutedescr = 'EANCUTIE2' then substitutecode end) as EANCUTIE2, 
     max(case when substitutedescr = 'EANCUTIE3' then substitutecode end) as EANCUTIE3 
from substitute 
group by iteid; 
+0

Vielen Dank für die Antwort: D löste mein Problem. –