为此我真的无法拿出一个好标题。 我在第一张图片中有数据。 如果此人有蓝色或绿色,则我希望查询在一行中将“人”作为一列返回,然后在第二列中返回“是”(我可以使用case语句执行该步骤)。 如果此人具有所有其他颜色,我希望它在第二栏中返回该人的姓名和“否”。 分组依据很重要,因为我只希望人们在第二栏中显示一次“是”(如果他们有蓝色或绿色,否则显示“否”)。
答案 0 :(得分:0)
很多方法,但是由于您似乎想使用GROUP BY和CASE,因此您可以做的是在颜色为蓝色或绿色THEN 1时得到CASE的最大值,否则为0。>
这将给您每个名称一个1或0,然后您可以使用另一个CASE或REPLACE将1更改为“是”,将0更改为“否”。
另一种可能更高效,更易于读取/维护的方法是选择DISTINCT名称,然后使用相关子查询对EXISTS()进行一次CASE WHEN检查是否存在该名称的记录以及蓝色或绿色。存在时(...)然后为“是”,否则为“否”。
答案 1 :(得分:0)
请参见以下使用common table expression
的方法。这将返回预期结果
;WITH YES_RES AS
(
SELECT DISTINCT PERSON, 'YES' AS RES FROM tabname
WHERE COLOR IN ('Blue', 'Green')
),
NO_RES AS
(
SELECT DISTINCT PERSON, 'NO' AS RES FROM tabname
WHERE PERSON NOT IN (SELECT DISTINCT PERSON FROM YES_RES)
)
SELECT PERSON, RES FROM YES_RES
UNION
SELECT PERSON, RES FROM NO_RES
答案 2 :(得分:0)
我将使用条件聚合:
select person,
(case when sum(case when color in ('blue', 'green') then 1 else 0 end) > 0
then 'Yes' else 'No'
end) as flag
from t
group by person