Sql server 在以下情况下插入带有多个大小写的“选择”

Sql server 在以下情况下插入带有多个大小写的“选择”,sql-server,insert,case,Sql Server,Insert,Case,我试图使用select从另一个具有多个案例场景的表中插入到表中。每个人都有多个值,这在jointable中给出了多行。我想基于jointable中的col1选择col2 到目前为止,结果是3行相同的人,每行3个值中的1个 在这里查看结果 我想你需要一个有条件聚合的分组,类似这样的 INSERT INTO #temp (Name, WageNo, Tiltraedelses_dato, Jubilaeum ,Sabbatical, Anciennitet) SELECT e.FirstNa

我试图使用select从另一个具有多个案例场景的表中插入到表中。每个人都有多个值,这在jointable中给出了多行。我想基于jointable中的col1选择col2

到目前为止,结果是3行相同的人,每行3个值中的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]

这里有一些其他的方法来解决这个问题

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


可乐1可乐2?您期望的结果是什么样的?我希望插入一行,其中包含3个值中的每个值和单个值。就像合并了附加图像中的三行一样。
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]