可以使用条件汇总:
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
这是因为你的问题不清楚。你需要清楚解释它。 –