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