我正在使用SQL Server 2005并试图以我似乎无法正常工作的方式构建查询。SQL左加入CASE声明
我有两个表。一个表具有ItemTypes列表,另一个表具有ItemTypes和用户之间的映射列表。
我想有一个查询,将返回这些结果:
ID | ItemType | Enabled?
---------------------------------
1 | Type1 | false
2 | Type2 | true
启用的列是基于是否有其他表中的条目会。我想使用某种情况下,如果LEFT JOIN项存在,然后把TRUE,否则将假。
SELECT systype.ID, systype.TypeDescription,
'Enable' = CASE hid.ID WHEN NULL THEN 'true' ELSE 'false' END
FROM [HardwareTestcaseManagement].[dbo].[A7_SystemItemTypes] systype
LEFT JOIN [dbo].[A7_HiddenNewsFeedTypes] hid
ON systype.ID = hid.SystemItemTypesID
AND hid.UserName = @UserName
但是,这个查询我到目前为止^没有按照我的意图工作。
任何建议如何我可以调整这个查询工作如何我想要它?
编辑:当我做一个左连接,只选择列“hid.ID”它会返回为NULL或实际的ID。我希望能够根据它是否为空来修改这个值。
@Nenad实际上这是一个外表,所以可以非常以及它是NULL的情况。 (这在技术上不是WHERE子句,它是JOIN标准。) –
@AaronBertrand ..我的坏,我不知道如何,但我以为我见过'WHERE'关键字。 –
另请使用'[方括号]'而不是'单引号'作为列别名。后者以多种形式被弃用*和*使您的别名看起来像一个字符串。或者更好的是,不要使用关键字,也不要打扰它逃避 - 这是没有必要的。 'SELECT Enable = 1;'工作得很好,除了由于IntelliSense,SSMS中的“Enable”出现蓝色。 –