不幸的是,我没有找到对此的引用,尽管这应该不是一个很常见的问题。
我有两张桌子:
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;