Это:
SELECT a.SKU, a.Code, a.Bin
, b.SeqNo, b.ID, b.Value
FROM TableA AS a
JOIN TableB AS b
ON b.SKU = a.SKU
AND b.Code = a.Code
AND b.SeqNo = ( SELECT MAX(bm.SeqNo)
FROM TableB AS bm
WHERE bm.SKU = a.SKU
AND bm.Code = a.Code
)
покажет:
SKU Code Bin SeqNo ID Value
-------------------------------------------------------
FA25 A1707 Q890 20110817002652517 GRADE 1
FA25 A1707 Q890 20110817002652517 SIZE 25
FA25 A1707 Q890 20110817002652517 COLOR BLACK
FA25 A1707 Q890 20110817002652517 FINISH AF
Затем вы можете изменить вышеприведенное, чтобы получить то, что вы хотите (ищите PIVOTING / UNPIVOTING, чтобы найти другие способы достижения того же самого)
SELECT a.SKU, a.Code, a.Bin
, MIN( CASE WHEN b.ID = 'GRADE'
THEN b.Value
ELSE NULL
END
) AS Grade
, MIN( CASE WHEN b.ID = 'SIZE'
THEN b.Value
ELSE NULL
END
) AS Size
, MIN( CASE WHEN b.ID = 'COLOR'
THEN b.Value
ELSE NULL
END
) AS Color
, MIN( CASE WHEN b.ID = 'FINISH'
THEN b.Value
ELSE NULL
END
) AS Finish
FROM TableA AS a
JOIN TableB AS b
ON b.SKU = a.SKU
AND b.Code = a.Code
AND b.SeqNo = ( SELECT MAX(bm.SeqNo)
FROM TableB AS bm
WHERE bm.SKU = a.SKU
AND bm.Code = a.Code
)
GROUP BY a.SKU, a.Code, a.Bin
покажет:
SKU Code Bin Grade Size Color Finish
----------------------------------------------
FA25 A1707 Q890 1 25 BLACK AF
Другой способ будет:
SELECT ad.SKU, ad.Code, ad.Bin
, b1.Value AS Grade
, b2.Value AS Size
, b3.Value AS Color
, b4.Value AS Finish
FROM
( SELECT a.SKU, a.Code, a.Bin
, ( SELECT MAX(bm.SeqNo)
FROM TableB AS bm
WHERE bm.SKU = a.SKU
AND bm.Code = a.Code
) AS MaxSeqNo
FROM TableA AS a
) AS ad
LEFT JOIN TableB AS b1
ON b1.SKU = ad.SKU
AND b1.Code = ad.Code
AND b1.SeqNo = ad.MaxSeqNo
AND b1.ID = 'GRADE'
LEFT JOIN TableB AS b2
ON b2.SKU = ad.SKU
AND b2.Code = ad.Code
AND b2.SeqNo = ad.MaxSeqNo
AND b2.ID = 'SIZE'
LEFT JOIN TableB AS b3
ON b3.SKU = ad.SKU
AND b3.Code = ad.Code
AND b3.SeqNo = ad.MaxSeqNo
AND b3.ID = 'COLOR'
LEFT JOIN TableB AS b4
ON b4.SKU = ad.SKU
AND b4.Code = ad.Code
AND b4.SeqNo = ad.MaxSeqNo
AND b4.ID = 'FINISH'