我正在寻找更好的方法来实现使用Query 2实现的结果2.简单来说,我正在尝试将File和CD列合并为每个SalesDetailId的单行。很明显,查询2并不是性能的理想选择。查询1和结果1是我开始使用的,它显示了我正在使用的数据结构类型。
SELECT
SDT.SalesDetailId,
RlFile.Code AS FILE,
RlCD.Code AS CD
FROM SalesDetail SDT
INNER JOIN Sales S
ON S.SalesID = SDT.SalesID
LEFT JOIN SalesReflookup SRL
ON SRL.SalesID = S.SalesID AND SRL.RefLookupTypeId IN (30,200)
LEFT JOIN reflookup.reflookup RlFileStatus
ON RlFileStatus.reflookupid = SRL.reflookupid AND RlFile.reflookuptypeid = 30
LEFT JOIN reflookup.reflookup RlCatastrophe
ON RlCD.reflookupid = SRL.reflookupid AND RlCatastrophe.reflookuptypeid = 200
WHERE
SDT.SalesDetailId = 4042910
| SalesDetailId | FILE | CD |
| 4042910 | C | NULL |
| 4042910 | NULL | 95E |
SELECT
SDT.SalesDetailId,
FILE.Code AS FILE,
CD.Code AS CD
FROM SalesDetail SDT
INNER JOIN Sales S
ON S.SalesID = SDT.SalesID
LEFT JOIN (SELECT
RL.code,SRL.SalesID
FROM reflookup.reflookup RL
INNER JOIN SalesReflookup SRL
ON RL.reflookupid = SRL.reflookupid AND RL.reflookuptypeid = 30) FILE ON FILE.SalesID = S.SalesID
LEFT JOIN (SELECT
RL.code,SRL.SalesID
FROM reflookup.reflookup RL
INNER JOIN SalesReflookup SRL
ON RL.reflookupid = SRL.reflookupid AND RL.reflookuptypeid = 200) CD ON CD.SalesID = S.SalesID
WHERE SDT.SalesDetailId = 4042910
| SalesDetailId | FILE | CD |
| 4042910 | C | 95E |
答案 0 :(得分:2)
您可以在第一个查询中使用GROUP BY
:
SELECT SDT.SalesDetailId,
MAX(RlFile.Code) AS FILE,
MAX(RlCD.Code) AS CD
FROM . . .
WHERE SDT.SalesDetailId = 4042910
GROPU BY SDT.SalesDetailId;