2016-01-13 88 views
-1

表1如何形成这个SQL查询

ID |Name1 | Name2 | Name3 
1 |Zaheer | Sachin | Adam 
2 |Daniel| Jessica| Kevin 

表2

ID| Style| Name| Surname 
1 | Bowler| Zaheer | Khan 
2 | Keeper | Adam | Gilchrist 
3 | Batsman | Sachin | Tendulkar 
4 | Actor | Kevin| Spacey 
5 | Actress | Jesica | Alba 
6 | Actor| Daniel| Craig 

结果

Style|Surname|Style|Surname|Style|Surname 
Bowler | Khan |Batsman | Tendulkar |Keeper | Gilchrist 
Actor | Craig|Actress | Alba  |Actor | Spacey 

我与工会试了一下,加入,但我不是摹ETTING所需的结果

+2

你甚至想出了这样的结果? –

+1

很少有人投票不理解问题..超级 – pranav012

+0

这是因为你的问题不清楚。你需要清楚解释它。 –

回答

0

可以使用条件汇总:

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 
+0

谢谢菲利克斯。完美的解决方案...如果我没有ID列? – pranav012

0

SORRY:误读的问题 - 请忽略此答案

 It looks like you can get your result from just Table2: 
     select style, surname from table2 
+0

不是你的错。有人编辑我的问题,并看起来像那样 – pranav012