MSSQL:多次引用其他表

时间:2018-12-12 14:50:55

标签: sql sql-server tsql

不幸的是,尽管这不是一个很常见的问题,但我没有找到对此的参考。

我有两个表:

TABLE d

Date   ClientID1 ClientID2 ClientID3
1.1.10    1          2         3

TABLE c

ClientID   Name
    1      abc
    2      def
    3      ghi

我想创建下表:

Date   ClientID1   NameID1   ClientID2   NameID2   ClientID3   NameID3
1.1.10     1         abc         2         def         3         ghi

我知道我可以使用嵌套查询(例如

)解决此问题
SELECT e.*, c.Name AS NameID2
FROM (
   SELECT d.*, c.Name AS NameID1
   FROM d, c
   WHERE d.ClientID1=c.ClientID
   ) AS e, c
WHERE d.ClientID2=c.ClientID
... and so on

但是,这种解决方案并不完美,我认为应该有一个更好的解决方案(尤其是如果我们有更多的专栏想要这样做的话)。

1 个答案:

答案 0 :(得分:1)

我将apply有条件的聚合一起使用:

select d.date,
       max(case when client = 'ClientID1' then ClientID end) AS [ClientID1],
       max(case when client = 'ClientID1' then Name end) AS [NameID],
       . . . 
from d cross apply
     ( values ('ClientID1', ClientID1), ('ClientID2', ClientID2), ('ClientID3', ClientID3)  
     ) dd (client, c_value) inner join
     c 
     on c.ClientID = dd.c_value
group by d.date;