Reputation: 43
I am looking for better way to achieve Result 2 that I have achieved using Query 2. In simple words, I am trying to merge File and CD columns into a single row for each SalesDetailId. It's obvious that Query 2 is not ideal for performance. Query 1 and Result 1 is what I started with which shows the kind of data structure I am working with.
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 |
Upvotes: 2
Views: 65
Reputation: 1269493
You can use GROUP BY
on the first query:
SELECT SDT.SalesDetailId,
MAX(RlFile.Code) AS FILE,
MAX(RlCD.Code) AS CD
FROM . . .
WHERE SDT.SalesDetailId = 4042910
GROPU BY SDT.SalesDetailId;
Upvotes: 2