2016-11-30 2 views
2

여러 사례 시나리오가있는 다른 테이블에서 select를 사용하여 테이블에 삽입하려고합니다. 각 사람은 두 개 이상의 값을 가지므로 연결 가능한 행에 여러 행이 있습니다. joint1에서 col1을 기반으로 col2를 선택하고 싶습니다.여러 사례가있는 INSERT INTO SELECT

결과는 같은 사람의 3 줄, 각 줄의 3 개의 값 중 하나입니다.

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

나는 각 행과 3 개의 값 중 하나가 삽입 된 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]