2011-10-29 26 views
0

我有這個表:T-SQL查詢來尋找共同的特點

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

回答

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 

請注意,這不會在一行中分組。並注意你的問題是錯誤的。 ID5是一個ID,所以moto不是所有的ID s。所有的ID至少有一個值是很常見的。

如果我們書面過濾這些ID S,

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)?和太多的人來算:-)

+0

爲什麼選擇Oracle? OP指定TSQL。 –

+1

@MartinSmith因爲我給了他錯誤的鏈接:-)我收集了一些關於STRING_AGG替代品的鏈接,我給了他一個錯誤的鏈接 – xanatos