是否可以使用多个CASE语句来返回并排(相同行)的结果?我已经阅读了很多与CASE相关的帖子,但是没有看到这个问题。
我有2个样本表: 交易
RowID TrxNo
1 12345
2 23456
3 34567
4 45678
5 56789
6 67890
7 78901
和文件
RowID TrxNo DocNo
1 12345 1
2 12345 2
3 12345 3
4 23456 1
5 34567 1
6 34567 2
7 45678 1
8 45678 2
9 56789 1
10 56789 2
11 56789 3
基于这些表,这个查询
SELECT T.TrxNo
,CASE WHEN D.DocNo = 1 THEN D.DocNo ELSE 0 END AS Doc1
,CASE WHEN D.DocNo = 2 THEN D.DocNo ELSE 0 END AS Doc2
,CASE WHEN D.DocNo = 3 THEN D.DocNo ELSE 0 END AS Doc3
FROM [dbo].[Transaction] T
LEFT OUTER JOIN
[dbo].[Document] D ON D.TrxNo = T.TrxNo
返回
TrxNo Doc1 Doc2 Doc3
12345 1 0 0
12345 0 2 0
12345 0 0 3
23456 1 0 0
34567 1 0 0
34567 0 2 0
45678 1 0 0
45678 0 2 0
56789 1 0 0
56789 0 2 0
56789 0 0 3
67890 0 0 0
78901 0 0 0
我希望它返回
TrxNo Doc1 Doc2 Doc3
12345 1 2 3
23456 1 0 0
34567 1 2 0
45678 1 2 0
56789 1 2 3
67890 0 0 0
78901 0 0 0
这是我的第一篇文章 - 我希望这些信息足够清晰。
答案 0 :(得分:2)
是的,但您还需要聚合:
SELECT T.TrxNo,
MAX(CASE WHEN D.DocNo = 1 THEN D.DocNo ELSE 0 END) AS Doc1,
MAX(CASE WHEN D.DocNo = 2 THEN D.DocNo ELSE 0 END) AS Doc2,
MAX(CASE WHEN D.DocNo = 3 THEN D.DocNo ELSE 0 END) AS Doc3
FROM [dbo].[Transaction] T LEFT OUTER JOIN
[dbo].[Document] D
ON D.TrxNo = T.TrxNo
GROUP BY T.TrxNo;