Если у вас есть только одна строка TableB
для каждых EventID
и (Code=5
или Code=15
или Code=18
или Code=40
), то вы можете проверить этот запрос:
;WITH SourceCTE
AS
(
SELECT a.COlA, a.ColB, u.UserName, b.Code, b.Value
FROM TableA a JOIN Users u ON a.UserId = u.UserId
INNER /*or LEFT OUTER*/ JOIN TableB b ON a.EventId = b1.EventId AND b.Code IN (5,15,18,40)
WHERE (a.UserId = 3) ORDER BY u.UserName ASC
)
SELECT pvt.CodA, pvt.ColB, pvt.UserName
,pvt.[5] AS b1Value
,pvt.[15] AS b2Value
,pvt.[18] AS b3Value
,pvt.[40] AS b4Value
FROM SourceCTE src
PIVOT (MAX(src.Value) FOR src.Code IN ([5],[15],[18],[40])) pvt;
Примечание: если у вас SQL Server 2008
, вы можете создать уникальный отфильтрованный индекс для EventID
, включая поле Value
с одним фильтром: WHERE Code IN (5,15,18,40)
.