MSSQL:多次参考其他表格



不幸的是,我没有找到对此的引用,尽管这应该不是一个很常见的问题。

我有两张桌子:

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

然而,这个解决方案一点也不优雅,我认为应该有一个更好的解决方案(特别是如果我们有更多的专栏想要这样做的话(。

我会将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;

最新更新