2016-11-30 14 views
2

Ich versuche, in Tabelle mit Auswahl aus einer anderen Tabelle mit mehreren Fällen Szenarien einfügen. Jede Person hat mehr als einen Wert, was mehrere Zeilen im Gelenk ergibt. Ich möchte Col2 basierend auf Col1 aus dem Jointable auswählen.INSERT IN SELECT mit mehreren CASE WHEN

Das Ergebnis ist bisher 3 Zeile der gleichen Person, 1 der 3 Werte in jeder Zeile.

See Ergebnis hier

enter image description here

INSERT INTO #temp (Name, WageNo, Tiltraedelses_dato, Jubilaeum ,Sabbatical, Anciennitet) 

SELECT 
e.FirstName, 
e.WageSystemKey, 
e.[StartDate], 
CASE WHEN v.EmployeeCustomColumnId = 2 THEN v.Value END, 
CASE WHEN v.EmployeeCustomColumnId = 3 THEN v.Value END, 
CASE WHEN v.EmployeeCustomColumnId = 1 THEN v.Value END 

FROM Employees e 
LEFT JOIN EmployeeCustomValue v on e.EmployeeId = v.EmployeeId 

SELECT * FROM #temp 
+0

col1 col2? Wie sieht Ihr erwartetes Ergebnis aus? –

+0

Ich würde erwarten, dass 1 Zeile mit jedem einzelnen der 3 Werte eingefügt wird. Wenn Sie die drei Zeilen im angehängten Bild zusammengeführt haben. – Gervo

Antwort

1

Ich glaube, Sie brauchen eine Gruppe mit bedingten Aggregation, so etwas wie dieses

INSERT INTO #temp (Name, WageNo, Tiltraedelses_dato, Jubilaeum ,Sabbatical, Anciennitet) 

SELECT 
e.FirstName, 
e.WageSystemKey, 
e.[StartDate], 
max(CASE WHEN v.EmployeeCustomColumnId = 2 THEN v.Value END), 
max(CASE WHEN v.EmployeeCustomColumnId = 3 THEN v.Value END), 
max(CASE WHEN v.EmployeeCustomColumnId = 1 THEN v.Value END) 

FROM Employees e 
LEFT JOIN EmployeeCustomValue v on e.EmployeeId = v.EmployeeId 
group by e.FirstName, 
e.WageSystemKey, 
e.[StartDate] 
0

Hier sind ein paar andere Möglichkeiten, um zu gehen Dies.

INSERT INTO #temp (Name, WageNo, Tiltraedelses_dato, Jubilaeum ,Sabbatical, Anciennitet) 

SELECT 
e.FirstName, 
e.WageSystemKey, 
e.[StartDate], 
v2.Value, 
v3.Value, 
v1.Value 

FROM Employees e 
LEFT JOIN EmployeeCustomValue v1 on e.EmployeeId = v1.EmployeeId and v1.EmployeeCustomColumnId = 1 
LEFT JOIN EmployeeCustomValue v2 on e.EmployeeId = v2.EmployeeId and v2.EmployeeCustomColumnId = 2 
LEFT JOIN EmployeeCustomValue v3 on e.EmployeeId = v3.EmployeeId and v3.EmployeeCustomColumnId = 3 

Oder

INSERT INTO #temp (Name, WageNo, Tiltraedelses_dato, Jubilaeum ,Sabbatical, Anciennitet) 

SELECT FirstName, WageSystemKey, [StartDate], 
MAX(Jubilaeum) AS Jubilaeum, MAX(Sabbatical) AS Sabbatical, 
MAX(Anciennitet) AS Anciennitet 
FROM (SELECT 
e.FirstName, 
e.WageSystemKey, 
e.[StartDate], 
CASE WHEN v.EmployeeCustomColumnId = 2 THEN v.Value END AS Jubilaeum, 
CASE WHEN v.EmployeeCustomColumnId = 3 THEN v.Value END AS Sabbatical, 
CASE WHEN v.EmployeeCustomColumnId = 1 THEN v.Value END AS Anciennitet 

FROM Employees e 
LEFT JOIN EmployeeCustomValue v on e.EmployeeId = v.EmployeeId) AA 
GROUP BY FirstName, WageSystemKey, [StartDate]