2016-11-30 14 views
2

複数のケースシナリオを持つ別のテーブルから選択してテーブルに挿入しようとしています。各人物には複数の値があり、ジョイント可能に複数の行が与えられます。私は、ジョイント可能なcol1に基づいてcol2を選択したいと思います。複数のケースを含むINSERT INTO SELECT

これまでの結果は、同じ行の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つの行と1つの3つの値が挿入されることを期待します。 添付画像の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] 
関連する問題