不幸的是,尽管这不是一个很常见的问题,但我没有找到对此的参考。
我有两个表:
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
但是,这种解决方案并不完美,我认为应该有一个更好的解决方案(尤其是如果我们有更多的专栏想要这样做的话)。
答案 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;