2016-06-09 2 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 | 
+----------+--------+---------------------+----------+-------+------------+ 

, 같은 okeyname 여러 져야 할 엔트리가 있다는 것입니다. 이제 dublicate okeydata가없는 행의 상위 항목 만 원합니다.

이 경우 결과는 "1360"및 "1377"이어야합니다.

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

를하지만 항상 내가 GROUP BY에 parentid 포함 것을 원한다 :

지금이 내가 일을하려고 한 것입니다. 하지만 나는 이것을 원하지 않는다. 어떻게 그 문제를 해결할 수 있습니까?

감사합니다.

+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"로 다른 행을 habe하고 모든 고유 한 okeydata 필드를 표시하려면 어떻게해야합니까? –

+0

@Baris Kilic : 여전히 작동해야합니다. Damien을 'okeydata'별로 그룹화하므로 'okeydata'당 결과 행이 하나씩 있습니다. 그런 다음이 레코드를 하나의 레코드 만있는 'okeydata'로 제한합니다. 따라서 결과 행당 MIN (parentid)를 선택하면 행 당 * parentid를 가져옵니다. 왜 효과가 없다고하니? –

+0

@BarisKilic - 괜찮을 것입니다. 위와 같이하고 싶을 수있는 유일한 변형은 여러 개의 'okeyname'값을 쿼리하는 것입니다.이 경우 해당 컬럼을 GROUP BY 절에 추가하고자 할 것입니다. 그러나 동일한 문제가 원래 쿼리에있었습니다. –