可以使用條件彙總:
WITH CTE AS(
SELECT
t1.ID,
t2.Style,
t2.Surname,
RN = ROW_NUMBER() OVER(PARTITION BY t1.ID ORDER BY t2.ID)
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.Name IN(t1.Name1, t1.Name2, t1.Name3)
)
SELECT
Style = MAX(CASE WHEN RN = 1 THEN Style END),
Surname = MAX(CASE WHEN RN = 1 THEN Surname END),
Style = MAX(CASE WHEN RN = 2 THEN Style END),
Surname = MAX(CASE WHEN RN = 2 THEN Surname END),
Style = MAX(CASE WHEN RN = 3 THEN Style END),
Surname = MAX(CASE WHEN RN = 3 THEN Surname END)
FROM CTE
GROUP BY ID
如果你想在列的順序爲Name1
,Name2
,Name3
,您需要先取消Table1
第一項:
WITH CTE AS(
SELECT
t1.ID,
t2.Style,
t2.Surname,
RN = ROW_NUMBER() OVER(PARTITION BY t1.ID ORDER BY t1.No)
FROM (
SELECT ID, x.No, x.Name
FROM Table1
CROSS APPLY (VALUES
(1, Name1), (2, Name2), (3, Name3)
) x (No, Name)
) t1
INNER JOIN Table2 t2
ON t2.Name = t1.Name
)
SELECT
Style = MAX(CASE WHEN RN = 1 THEN Style END),
Surname = MAX(CASE WHEN RN = 1 THEN Surname END),
Style = MAX(CASE WHEN RN = 2 THEN Style END),
Surname = MAX(CASE WHEN RN = 2 THEN Surname END),
Style = MAX(CASE WHEN RN = 3 THEN Style END),
Surname = MAX(CASE WHEN RN = 3 THEN Surname END)
FROM CTE
GROUP BY ID
你甚至想出了這樣的結果? –
很少有人投票不理解問題..超級 – pranav012
這是因爲你的問題不清楚。你需要清楚解釋它。 –