하위 쿼리가 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)
내가 받고 있는 오류는...
서브쿼리가 EXISTS에 도입되지 않은 경우 선택 목록에서 지정할 수 있는 식은 1개뿐입니다.`
서브쿼리를 단독으로 실행하면 정상적으로 반환되기 때문에 메인쿼리에 문제가 있다고 생각됩니다.
하위 쿼리에서 두 개(또는 여러 개)의 열을 반환하여 에서 비교할 수 없습니다.WHERE A_ID IN (subquery)절 - 비교할 컬럼A_ID대상? 서브쿼리는 다른 쪽 컬럼과의 비교에 필요한1개의 컬럼만 반환해야 합니다.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)
반환된 값을 변수에 할당하는 쿼리에서는 1개의 열과1개의 행만 반환해야 합니다.예:
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
)
누군가에게 도움이 될 경우를 대비해서, 이 에러의 원인은 다음과 같습니다.json을 반환하는 절차가 필요했는데 for json path를 생략했습니다.
set @jsonout = (SELECT ID, SumLev, Census_GEOID, AreaName, Worksite
from CS_GEO G (nolock)
join @allids a on g.ID = a.[value]
where g.Worksite = @worksite)
저장 프로시저를 저장하려고 했을 때 오류가 발생했습니다.절차 끝에 json 경로를 코드에 추가하여 수정했습니다.
set @jsonout = (SELECT ID, SumLev, Census_GEOID, AreaName, Worksite
from CS_GEO G (nolock)
join @allids a on g.ID = a.[value]
where g.Worksite = @worksite for json path)
서브쿼리의 투영에는
SELECT t.col1,t.col2
FROM table1 t
WHERE EXISTS (SELECT st.col1,st.col2
FROM table2 st
WHERE st.fcol = t.fcol)
언급URL : https://stackoverflow.com/questions/1904314/only-one-expression-can-be-specified-in-the-select-list-when-the-subquery-is-not
'programing' 카테고리의 다른 글
| 2개의 SQL Server 데이터베이스(스케마 및 데이터)를 비교하기 위한 최적의 툴은 무엇입니까? (0) | 2023.04.06 |
|---|---|
| 테이블 추가 열 구문 변경 (0) | 2023.04.06 |
| SQL Server 로그인이 이미 있는지 확인하는 중 (0) | 2023.04.06 |
| Tablix: 각 페이지의 헤더 행을 반복합니다(Report Builder 3.0). (0) | 2023.04.06 |
| SQL Server - INSERT 후 값 반환 (0) | 2023.04.06 |