测试数据
DECLARE @AccidentType TABLE(AccidentTypeID INT, [Description] NVARCHAR(100))
INSERT INTO @AccidentType VALUES
(1,'Type1'),(2,'Type2'),(3,'Type3'),(4,'Type4')
DECLARE @CaseAccidentType TABLE(AccidentTypeID INT,CaseID INT)
INSERT INTO @CaseAccidentType VALUES
(1,1000),(2,1000),(3,1001)
DECLARE @Case TABLE(CaseID INT, Name NVARCHAR(100))
INSERT INTO @Case VALUES
(1000,'Case A'),(1001,'Case B')
查询
;With CTE
AS(
SELECT *
FROM
(
SELECT C.CaseID,C.Name, AT.[Description]
FROM @Case C INNER JOIN @CaseAccidentType CAT
ON C.CaseID = CAT.CaseID
INNER JOIN @AccidentType AT
ON CAT.AccidentTypeID = AT.AccidentTypeID
) Q
PIVOT
(MAX(Name)
FOR [Description]
IN ([Type1],[Type2],[Type3],[Type4])
)Pv
)
SELECT CT.CaseID
,C.Name
,CASE WHEN CT.Type1 IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Type1
,CASE WHEN CT.Type2 IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Type2
,CASE WHEN CT.Type3 IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Type3
,CASE WHEN CT.Type4 IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Type4
FROM CTE CT INNER JOIN @Case C
ON CT.CaseID = C.CaseID
结果集
╔════════╦════════╦═══════╦═══════╦═══════╦═══════╗
║ CaseID ║ Name ║ Type1 ║ Type2 ║ Type3 ║ Type4 ║
╠════════╬════════╬═══════╬═══════╬═══════╬═══════╣
║ 1000 ║ Case A ║ TRUE ║ TRUE ║ FALSE ║ FALSE ║
║ 1001 ║ Case B ║ FALSE ║ FALSE ║ TRUE ║ FALSE ║
╚════════╩════════╩═══════╩═══════╩═══════╩═══════╝
它会一直是type1,2,3和4吗?或者它可能更多?无限? – MrSimpleMind
会有很多不同的类型。是否有可能通过硬编码类型来解决这个问题? – Jammy