T-SQL查询查找常用功能

时间:2011-10-29 10:21:41

标签: tsql

我有这张桌子:

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都是通用的

1 个答案:

答案 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-SQLtsql aggregate string for group byImplode type function in SQL Server 2000?How to return multiple values in one column (T-SQL)?以及其他太多其他内容上非常常见: - )