2016-11-30 61 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]