T-SQL запрос, чтобы найти общие черты - PullRequest
0 голосов
/ 29 октября 2011

У меня есть эта таблица:

ID    Value
------------
1     car
1     moto
2     car
2     moto
3     moto
3     apple
4     gel
4     moto
5     NULL

обратите внимание, что moto является общим для всех идентификаторов.

Я хотел бы получить одну строку с таким результатом

car*, moto, apple*, gel*

т.е.

  • car, apple, gel со звездочкой, потому что присутствует, но НЕ во всех идентификаторах
  • moto без звездочки, потому что ОБЩА для всех идентификаторов

1 Ответ

2 голосов
/ 29 октября 2011

Если 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 является идентификатором, поэтому 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-программирование / конкатенация-row-values-in-transact-sql / Я добавлю, что, к сожалению, tsql не имеет никакого собственного метода для этого, и все альтернативы немного уродливы: -)

Как правило, часть агрегирования строк довольно распространена в SO (и за ее пределами) Конкатенация значений строк T-SQL , tsql агрегированная строка для группы , Функция взрыва в SQL Server 2000? , Как вернуть несколько значений в одном столбце (T-SQL)? и слишком много других для подсчета: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...