2016-11-30 73 views
2

我試圖插入到表中使用選擇從多個案例場景的另一個表。每個人都有多個值,這會在連接表中給出多行。我想根據連接表中的col1選擇col2。INSERT INTO選擇多個CASE何時

到目前爲止的結果是同一人的3行,每行3個值中的1個。

這裏

見結果

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?你的預期結果是什麼樣的? –

+0

我期望1行插入每個和3個值中的一個。 就像合併了附加圖像中的三行一樣。 – Gervo

回答

1

我覺得你有條件的聚集,這樣的事情

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

需要一批這裏有幾個其他的方式去這個。

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 

或者

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]