하위 쿼리가 EXISTS에 도입되지 않은 경우 선택 목록에 하나의 표현식 만 지정할 수 있습니다.


178

내 쿼리는 다음과 같으며 그 안에 하위 쿼리가 포함되어 있습니다.

 select count(distinct dNum)
 from myDB.dbo.AQ
 where A_ID in 
  (SELECT DISTINCT TOP (0.1) PERCENT A_ID, 
            COUNT(DISTINCT dNum) AS ud 
 FROM         myDB.dbo.AQ
 WHERE     M > 1 and B = 0 
 GROUP BY A_ID ORDER BY ud DESC)

내가받는 오류는 ...

Only one expression can be specified in the select list when the subquery is not
introduced with EXISTS.`

하위 쿼리를 단독으로 실행하면 잘 반환되므로 기본 쿼리에 문제가 있다고 가정합니다.

답변:


231

하위 쿼리에서 두 (또는 여러) 열을 반환하여 WHERE A_ID IN (subquery)절 에서 비교를 수행 할 수 없습니다 - 비교 할 열은 A_ID무엇입니까? 하위 쿼리는의 다른쪽에있는 열과 비교하는 데 필요한 하나의 열만 반환해야합니다 IN. 따라서 쿼리는 다음과 같은 형식이어야합니다.

SELECT * From ThisTable WHERE ThisColumn IN (SELECT ThatColumn FROM ThatTable)

정렬을 추가하여 맨 위 행에서만 선택할 수 있지만 정렬을 수행하기 위해 COUNT를 열로 리턴 할 필요는 없습니다. ORDER절 에서의 정렬 은 쿼리에서 반환 된 열과 무관합니다.

다음과 같이 해보십시오 :

select count(distinct dNum) 
from myDB.dbo.AQ 
where A_ID in
    (SELECT DISTINCT TOP (0.1) PERCENT A_ID
    FROM myDB.dbo.AQ 
    WHERE M > 1 and B = 0
    GROUP BY A_ID 
    ORDER BY COUNT(DISTINCT dNum) DESC)

83

반환 된 값을 변수에 할당하는 where 쿼리에서 하나의 열과 하나의 행만 반환해야합니다. 예:

select * from table1 where Date in (select * from Dates) -- Wrong
select * from table1 where Date in (select Column1,Column2 from Dates) -- Wrong
select * from table1 where Date in (select Column1 from Dates) -- OK

2
도움이되지 않았습니다. 나에게 같은 오류가 발생합니다. 대신 열을 지정하면 *도움 이 되었습니다.
Mohammedsalim Shivani

11

그것에 대해 불평

COUNT(DISTINCT dNum) AS ud 

하위 쿼리 내부. 존재하는 쿼리를 수행하지 않으면 하위 쿼리에서 하나의 열만 반환 될 수 있습니다. 왜 같은 열에서 두 번 카운트를 수행해야하는지 잘 모르겠습니다. 여기의 하위 쿼리 는 조인과 동일하지 않은 필터 일뿐 입니다. 즉, 어떤 열을 다시 가져올 지 지정하지 않고 데이터를 제한하는 데 사용합니다.


때로는 쿼리 결과에 대해 조인하여 문제를 해결할 수도 있습니다.
JosephDoggie

5

여기에 매우 좋은 응답 외에도 하위 쿼리를 그대로 사용하려면이 방법을 시도해보십시오.

접근하다:

1) 하위 쿼리에서 원하는 열 (1 만)을 선택하십시오.

2) 열 이름을 매핑 할 위치를 사용하십시오.

암호:

 SELECT count(distinct dNum)
 FROM myDB.dbo.AQ
 WHERE A_ID in 
   (
    SELECT A_ID 
    FROM (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud 
          FROM         myDB.dbo.AQ
          WHERE     M > 1 and B = 0 
          GROUP BY A_ID ORDER BY ud DESC
         ) a 
   )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.