내 쿼리는 다음과 같으며 그 안에 하위 쿼리가 포함되어 있습니다.
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
)