sql - 使用基于不同表的关系的数据创建 SQL 视图
问题描述
我对 SQL 很陌生,我正在尝试在 Microsoft SSMS 中创建一个 SQL 视图。我提出了一些我很满意的观点,但是在这个观点中我遇到了一些问题。我做了一个简化的例子,试图解释我想要做什么。
假设我有三张表,其中一张列出人,第二张列出颜色,第三张列出人们喜欢哪种颜色之间的关系。
我现在要做的是创建一个视图,每人显示一行,说明该人是否喜欢红色。
SELECT
Person.Id, Person.Name, Color.Colorname,
CASE
WHEN ColorId = 4 THEN 'YES'
ELSE 'NO'
END AS 'Likes Red'
FROM
Person
INNER JOIN
Color ON Person.Id = Color.Id
INNER JOIN
PersonColorRelations ON Person.Id = PersonColorRelations.PersonId
解决方案
我会使用exists
:
select *, (case when exists (select 1
from PersonColorRelations pr
where pr.PersonId = p.id and
pr.colorid = 4
)
then 'Yes' else 'No'
end) LikesRed
from Person p;
编辑:更多你可以做条件聚合:
select p.id, p.Name,
isnull(max(case when pr.colorid = 1 then 'Yes' end), 'No') as LikesBlack,
isnull(max(case when pr.colorid = 2 then 'Yes' end), 'No') as LikesBlue,
isnull(max(case when pr.colorid = 4 then 'Yes' end), 'No') as LikesRed,
. . .
from person p inner join
PersonColorRelations pr
on pr.PersonId = p.id
group by p.id, p.Name;
推荐阅读
- angular - Angularjs条件要求不起作用
- python - 如何遍历特定字段的所有键值对的json对象?
- python - 如何将列表中已有的单词分解为单个字符?
- python - 如何将此信息放在列中?
- swift - 使用 @fetchRequest(entity:) 处理 SwiftUI macOS 应用程序崩溃
- pygame - 为什么 pygame.display.update() 如果紧随其后的是输入?
- python - 更新从 Python 中的 json Api 导入的数据
- angular - 如何从单个服务器调用中填充 Angular 状态数据组件?
- python - python中的十六进制变量
- c - 如何将多个值添加到结构中