2017-12-27 8 views
1

Ich habe eine Tabelle mit Daten wie folgt aus:Auswahlzeilenwerte als Spalte basierend auf GROUP BY-Spalte

Id   Value 
------------------------- 
01   Id01-Value1  
01   Id01-Value2 
02   Id02-Value1 
02   Id02-Value2 
03   Id03-Value1 

Was ich will, ist

Id   Value1   Value2 
-------------------------------------- 
01   Id01-Value1  Id01-Value2 
02   Id02-Value1  Id02-Value2 
03   Id03-Value1 

habe ich versucht, SQL PIVOT aber es ist nicht für diese Art von Problem, denke ich.

Antwort

1

Ich glaube, Sie nur min() verwenden können und max():

select id, min(value) as value1, 
     (case when min(value) <> max(value) then max(value) end) as value2 
from t 
group by id; 
0

diese Antwort Versuchen Sie,

SELECT ID 
    ,MAX(CASE WHEN RN=1 THEN Value ELSE '' END)Value1 
    ,MAX(CASE WHEN RN=2 THEN Value ELSE '' END)Value2 
FROM(
    SELECT ID,Value 
    ,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Value)RN 
    FROM Your_Table 
    )D 
GROUP BY ID 
ORDER BY ID 
0

Im Gegenteil, PIVOT genau das, was Sie brauchen - wenn Sie es verdammt Syntax ertragen kann ! Es ist relativ flexibel, aber auch unhandlich.

SELECT 
    id 
    ,[1] AS Value1 
    ,[2] AS Value2 

FROM 
    (
     SELECT 
      id 
      ,value 
      ,ROW_NUMBER() OVER (PARTITION BY id ORDER BY value ASC) AS column_number 

     FROM 
      YOUR_TABLE_NAME 

    ) AS src 

PIVOT 
    (
     MAX(value) 
     FOR column_number IN ([1],[2]) 
    ) AS pvt 

ORDER BY 
    id 

Diese Zeilen in der value Spalte alphabetisch sortieren, und Spaltennummern entsprechend der Reihe nach ordnet (aber man konnte andere Logik umfassen zum Beispiel die Spaltennummer an der rechten Seite des Wertes einzuklemmen, oder benennen Sie die Spalten entsprechend dem Wert selbst, anstatt sie zu nummerieren). NULL-Werte werden für jede Spalte zurückgegeben, die keinen Wert hat.

Verwandte Themen