我正在尝试获取以下数据的sql。 我有像
这样的数据id | flag
1 | Y
2 | Y
1 | Y
2 | N
1 | Y
1 | Y
1 | Y
3 | N
3 | N
3 | N
2 | N
3 | N
成功输出
1 | Y
2 | Y
3 | N
如果id列有Y和或N则显示Y.如果它只包含N,则显示N
答案 0 :(得分:3)
SELECT [id], MAX([flag])
FROM Table1 GROUP BY [id]
答案 1 :(得分:1)
如果列中的值不是Y
和N
,则此功能将起作用。
SELECT t1.id, IF(t2.id IS NULL,'N','Y') AS flag
FROM tab t1 LEFT JOIN (
SELECT DISTINCT id FROM tab
WHERE flag = 'Y'
) t2 ON t1.id = t2.id GROUP BY t1.id
否则,Praveen的回答要简单得多。
答案 2 :(得分:0)
您只需要对该组的值进行分组和计数。你说如果它只包含N然后显示N 。这意味着当包含N
的所有标志等于组中的所有元素时,您应该显示N
。否则,Y
。
所以你只需要分组并执行之前的比较。从字面上看。这样,您就可以在以后出现Z
或NULL
标记时做出正确回复。
标准SQL
SELECT id,
CASE WHEN SUM(flag = 'N') = COUNT(*) THEN 'N' ELSE 'Y' END groupedFlag
FROM tab GROUP BY id
<强>的MySQL 强>
SELECT id, IF(SUM(flag = 'N') = COUNT(*), 'N', 'Y') groupedFlag
FROM tab GROUP BY id
摆弄Z
和NULL
旗帜here。
答案 3 :(得分:0)
我试过下面的方法它工作得很好。但我不相信我自己的query
select id, max( case when flag = 'Y' then 1 else 0 end ) flag_value
from table_name group by 1
然后我只是将1
与Y
和0
交换为N
我在想我是否可以进一步改善这一点。
答案 4 :(得分:0)
尝试此查询
select id,max(flag) as flag from test group by id