Если 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)? и слишком много других для подсчета: -)