Sql server CASE语句的SQL查询

Sql server CASE语句的SQL查询,sql-server,Sql Server,我有两个表,一个是主表,另一个表是你们可以从第一个表中选择项目 主表 ItemID ItemName 1 Football 2 Cricket 3 Badminton 选择表 UserID SelectedItemId 1 2 1 3 2 1 输出 UserId SelectedItemID SelectionStatus 1

我有两个表,一个是主表,另一个表是你们可以从第一个表中选择项目

主表

ItemID      ItemName
1           Football
2           Cricket
3           Badminton 
选择表

UserID     SelectedItemId
1            2
1            3
2            1
输出

UserId      SelectedItemID     SelectionStatus
1            1                   False
1            2                   True
1            3                   True
质疑


如果没有选择任何项目,那么所有项目都是假的。我不知道怎么做

您可以使用
else
left join
SelectionTable
MasterTable

SELECT  S.UserId,M.ItemID,
        CASE M.ItemID 
            WHEN 1 Then 'True'
            WHEN 2 Then 'True'
            WHen 3 Then 'True' 
            else 'False'
            END AS SelectionStatus
From SelectionTable S
  left JOIN MasterTable M ON S.SelectedItemID=M.ItemID      
WHERE S.UserId=1

假设您有一个
User
表,您可以通过查询cartesean product(交叉连接)获得每个用户/项目组合的状态

状态
True
False
可通过
SelectionTable
中是否存在相应记录来确定

select
    u.UserId,
    m.ItemId,
    case
        when exists
            (select *
            from SelectionTable s
            where s.UserId = u.UserId
              and s.SelectedItemId = m.ItemId)
        then 'True'
        else 'False'
    end
from MasterTable m, User u
此技术可应用于单用户情况(
UserId
等于1),如下所示:

select
    m.ItemId,
    case
        when exists
            (select *
            from SelectionTable s
            where s.UserId = 1
              and s.SelectedItemId = m.ItemId)
        then 'True'
        else 'False'
    end
from MasterTable m

将m.itemID切换到S.SelectedItemID。如果我只有两个表,为什么要假设另一个表呢?通常当你有一个
UserId
时,它对应一个自动生成的值。我已经修改了我的答案,使之适用于单个
用户ID
,并且只使用2个指定的表。顺便说一下,我使用了您的第二种技术。很好用。
select
    m.ItemId,
    case
        when exists
            (select *
            from SelectionTable s
            where s.UserId = 1
              and s.SelectedItemId = m.ItemId)
        then 'True'
        else 'False'
    end
from MasterTable m