首页 > 解决方案 > 使用基于不同表的关系的数据创建 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

标签: sqlsql-server

解决方案


我会使用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;

推荐阅读