我有一个带有 case 语句的 sql 查询,我需要使该查询在 sql 紧凑版中工作
查询:
select m.id, m.StartDate, m.EndDate, m.Message, m.URL, m.iconType, m.sortOrder, m.Owner,
'Kit' = CASE mr.type
WHEN 9 THEN(select mg.name from ing_materials_group mg where mg.materialsGroupId = mr.value)
WHEN 10 THEN(select mk.message from ing_message mk where mk.id = mr.value) END
from ing_message m
left join ing_message_relation mr on mr.messageID = m.id and (mr.type = 9 or mr.type = 10)
where m.type = 1 and m.deleted = 0 order by m.sortOrder
子查询在 sql 紧凑中出现问题,因此请帮助使用替代查询或使用 c# 进行编码
假设问题是紧凑仍然只支持完整 T-SQL 方言的子集,您可以将子查询更改为更传统的联接:
SELECT m.id, ...,
[Kit] = CASE mr.type
WHEN 9 THEN mg.name
WHEN 10 THEN mk.message END
FROM dbo.ing_message AS m
LEFT OUTER JOIN dbo.ing_message_relation AS mr
ON mr.messageID = m.id
AND (mr.type IN (9,10))
LEFT OUTER JOIN dbo.ing_materials_group AS mg
ON mg.materialsGroupId = mr.value
AND mr.type = 9
LEFT OUTER JOIN dbo.ing_message AS mk
ON mk.id = mr.value
AND mr.type = 10
WHERE m.type = 1
AND m.deleted = 0
ORDER BY m.sortOrder;
回车和缩进对于可读性也有很大帮助。