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

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

 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.`

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



답변

하위 쿼리에서 두 (또는 여러) 열을 반환하여 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)


답변

반환 된 값을 변수에 할당하는 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


답변

그것에 대해 불평

COUNT(DISTINCT dNum) AS ud 

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


답변

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

접근하다:

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
   )


답변