У меня есть таблица, которая содержит поле, которое используется для группировки, и другое поле, в котором хранятся данные. Мне нужен хороший способ найти значение GroupColumn, где каждое значение DataColumn содержит определенное значение.TSQL Найти, если все записи в группе имеют одинаковое значение
Пример
+-------------+------------+
| GroupColumn | DataColumn |
+-------------+------------+
| GroupA | Data1 |
| GroupA | Data2 |
| GroupA | Data3 |
| GroupB | Data1 |<---These two values are the same
| GroupB | Data1 |<---for the same group
| GroupC | Data1 |
| GroupC | Data2 |
| GroupC | Data2 |
| GroupC | Data3 |
+-------------+------------+
Желаемая Выход
Группа B
В приведенном выше примере изменения DataColumn для GroupA и GroupC, но для GroupB оба значения в DataColumn являются так что я бы хотел, чтобы этот результат вернулся.
Текущее решение
У меня 2 текущие решения, основанные вокруг одной и той же теме, но я чувствую, что это то, что SQL должен быть в состоянии сделать в более легкой форме.
Сгруппируйте все в таблице, подсчитайте время появления GroupColumn и поместите его в таблицу. Сделайте то же самое, но примените условие. Присоединитесь к двум таблицам и посмотрите, где не совпадают 2 счета.
SELECT GROUPCOLUMN, COUNT(*) [TOTAL] INTO #ALL FROM #TABLE GROUP BY GROUPCOLUMN SELECT GROUPCOLUMN, COUNT(*) [TOTAL] INTO #SOME FROM #TABLE WHERE DATACOLUMN = 'DATA1' GROUP BY GROUPCOLUMN SELECT * FROM #ALL A INNER JOIN #SOME S ON A.GROUPCOLUMN = S.GROUPCOLUMN WHERE S.TOTAL = A.TOTAL
Используйте SUM и случай для проверки конкретного значения и сосчитать все и проверить в суб-запроса.
SELECT * FROM (SELECT GROUPCOLUMN, SUM(CASE WHEN DATACOLUMN = 'DATA1' THEN 1 ELSE 0 END) [VALUE], COUNT(*) [TOTAL] FROM #TABLE (NOLOCK) GROUP BY GROUPCOLUMN) A WHERE A.VALUE = A.TOTAL
Есть ли лучший способ сделать это в SQL?
Заранее спасибо.
Ninja
Так просто и при этом так эффективно! Большое спасибо @Prdp. – Ninja