GROUP BY没有特定列

时间:2016-06-09 07:28:46

标签: sql group-by aggregate-functions having

我尝试这样做,但它不会让我。

我的表(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 |
+----------+--------+---------------------+----------+-------+------------+

你能看到的是,有几个同一个okeyname。 我现在只想要那个没有公共okeydata的行的parentid。

在这种情况下,结果应为" 1360"和" 1377"。

现在这就是我试图做的事情:

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

但它总是希望,我将parentid纳入GROUP BY。 但我不想要这个。 我怎么能解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:2)

由于知道结果只表示一行,因此如果只给定一个输入行,则应用任何返回其输入的聚合应该没有问题。例如。 MINMAXSUM

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