2016-06-09 4 views
0

Я пытаюсь это сделать, но это не позволит мне.GROUP BY без определенной колонки

Моя таблица (MSSQL):

 
+----------+--------+---------------------+----------+-------+------------+ 
| parentid | okeyno |  okeyname  | okeydata | recid | okeydouble | 
+----------+--------+---------------------+----------+-------+------------+ 
|  1357 |  1 | WINZERKE01_TESTFELD |  123 | 1486 |   0 | 
|  1360 |  1 | WINZERKE01_TESTFELD |  456 | 1488 |   0 | 
|  1362 |  1 | WINZERKE01_TESTFELD |  789 | 1492 |   0 | 
|  1361 |  1 | WINZERKE01_TESTFELD |  789 | 1490 |   0 | 
|  1358 |  1 | WINZERKE01_TESTFELD |  123 | 1484 |   0 | 
|  1377 |  1 | WINZERKE01_TESTFELD |  999 | 1485 |   0 | 
+----------+--------+---------------------+----------+-------+------------+ 

То, что вы можете видеть, что есть несколько entrys с тем же okeyname. Теперь я хочу только parentid строки, где нет dublicate okeydata.

В этом случае результатом должно быть «1360» и «1377».

Теперь это то, что я пытаюсь сделать:

SELECT parentid FROM objkeys WHERE okeyname = 'WINZERKE01_TESTFELD' GROUP BY okeydata HAVING COUNT(okeydata) = 1

Но она всегда хочет, чтобы я включил ParentID в GROUP BY. Но я не хочу этого. Как я могу решить эту проблему?

Спасибо.

+1

Вы говорите, что вы хотите только ParentID, 1360, так почему вы выбираете все столбцы (*)? – jarlh

ответ

2

Поскольку вы знаете, что результат представляет только одну строку, не должно возникнуть проблемы с применением каких-либо агрегатов, которые возвращают свой вход, если задана только одна строка ввода. Например. MIN, MAX, SUM:

SELECT 
    okeydata, MIN(parentid) as parentid 
FROM 
    objkeys 
WHERE 
    okeyname = 'WINZERKE01_TESTFELD' 
GROUP BY 
    okeydata 
HAVING 
    COUNT(okeydata) = 1 
+0

Хорошо, это, похоже, не так хорошо работает. Что делать, если я теперь использую другую строку с okeydata «999» и хочу, чтобы я показывал ВСЕ уникальные поля okeydata? –

+0

@Baris Kilic: Это должно все еще работать. Damien группы 'okeydata', поэтому на' okeydata' есть одна строка результатов. Затем он ограничивает это 'okeydata', для которого существует только одна запись. Поэтому при выборе 'MIN (parentid)' для каждой строки результата он получает * * parentid для каждой строки. Почему вы говорите, что это не работает? –

+0

@BarisKilic - это должно быть хорошо. Единственный вариант, который, я думаю, вы, возможно, захотите сделать в приведенном выше, будет, если вы запрашиваете несколько значений «okeyname» - в этом случае вы хотите добавить этот столбец в предложение «GROUP BY». Но эта же проблема была в вашем исходном запросе. –