我有这张桌子:
ID Value
------------
1 car
1 moto
2 car
2 moto
3 moto
3 apple
4 gel
4 moto
5 NULL
请注意moto
对所有ID都是通用的。
我想用这个结果获得一行
car*, moto, apple*, gel*
即。
car, apple, gel
因为存在而不是所有ID moto
没有星号,因为对所有ID都是通用的答案 0 :(得分:2)
如果ID + Value
是唯一的
SELECT Value, CASE WHEN COUNT(*) <> (SELECT COUNT(DISTINCT ID) FROM MyTable) THEN '*' ELSE '' END AS Asterisk FROM MyTable WHERE Value IS NOT NULL GROUP BY Value
请注意,这不会分组在一行中。请注意,您的问题是错误的。 ID
5
是一个ID,因此moto
并非ID
所有。所有至少具有值的ID
都是通用的。
如果我们按照书面过滤这些ID
,
SELECT Value, CASE WHEN COUNT(*) <> (SELECT COUNT(DISTINCT ID) FROM MyTable WHERE Value IS NOT NULL) THEN '*' ELSE '' END FROM MyTable WHERE Value IS NOT NULL GROUP BY Value
要将*
与Value
“合并”,只需将,
替换为+
,例如:
SELECT Value + CASE WHEN COUNT(*) <> (SELECT COUNT(DISTINCT ID) FROM MyTable WHERE Value IS NOT NULL) THEN '*' ELSE '' END Value FROM MyTable WHERE Value IS NOT NULL GROUP BY Value
要使一行使用https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/之一,我会补充一点,遗憾的是,tsql没有任何本地方法来执行此操作,并且所有替代方案都有点难看: - )
一般情况下,字符串聚合部分在SO(及其外部)Concatenate row values T-SQL,tsql aggregate string for group by,Implode type function in SQL Server 2000?,How to return multiple values in one column (T-SQL)?以及其他太多其他内容上非常常见: - )