복붙노트

[SQL] 서브 쿼리가 존재합니다 도입되지 않은 경우 하나 개의 표현이 선택 목록에 지정할 수 있습니다

SQL

서브 쿼리가 존재합니다 도입되지 않은 경우 하나 개의 표현이 선택 목록에 지정할 수 있습니다

내 쿼리는 다음과 같이하고, 그 안에 하위 쿼리가 포함되어 있습니다

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

혼자 하위 쿼리를 실행하면 내가 메인 쿼리와 약간의 문제가 가정하고, 잘 반환?

해결법

  1. ==============================

    1.이에 A_ID을 비교하도록되어 열 - 당신은 WHERE A_ID IN (하위 쿼리) 절에 비교를 위해 하위 쿼리에 두 개 (또는 여러) 열을 반환 할 수 없습니다? 귀하의 하위 쿼리에만 IN의 반대편에 열을 비교하는 데 필요한 하나의 열을 반환해야합니다. 그래서 질의는 다음 형식이어야합니다 :

    이에 A_ID을 비교하도록되어 열 - 당신은 WHERE A_ID IN (하위 쿼리) 절에 비교를 위해 하위 쿼리에 두 개 (또는 여러) 열을 반환 할 수 없습니다? 귀하의 하위 쿼리에만 IN의 반대편에 열을 비교하는 데 필요한 하나의 열을 반환해야합니다. 그래서 질의는 다음 형식이어야합니다 :

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

    당신은 또한 당신이 바로 상단 행에서 선택할 수 있도록 정렬을 추가 할 수 있지만, 당신은 당신의 정렬을하기 위해 열로 COUNT를 반환 할 필요가 없습니다; 주문 절에서 정렬하는 쿼리에 의해 반환 된 열의 독립적이다.

    이 같은 시도 :

    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)
    
  2. ==============================

    2.당신은 당신이 변수에 반환 값을 할당하는 경우 쿼리에서 하나의 열과 하나 개의 행을 반환해야합니다. 예:

    당신은 당신이 변수에 반환 값을 할당하는 경우 쿼리에서 하나의 열과 하나 개의 행을 반환해야합니다. 예:

    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
    
  3. ==============================

    3.그것은 대해 불평

    그것은 대해 불평

    COUNT(DISTINCT dNum) AS ud 
    

    부질의 내부. 당신이이 쿼리를 존재 수행하지 않는 하나의 열은 하위 쿼리에서 반환 할 수 있습니다. 당신이 두 번 같은 열에 수를하고 싶은 이유는 표면적으로 당신이 무엇을하고 있는지에 중복 보이는, 잘 모르겠어요. 여기에 하위 쿼리는 조인으로는 동일하지 않습니다 단지 필터입니다. 즉 당신이 데이터를 제한하기 위해 다시 얻기 위해 무엇을 열 지정하지 그것을 사용할 수 있습니다.

  4. ==============================

    4.당신은 귀하의 하위 쿼리를 사용하려면 별도로 여기에 아주 좋은 반응에서, 당신은뿐만 아니라 이것을 시도 할 수 있습니다.

    당신은 귀하의 하위 쿼리를 사용하려면 별도로 여기에 아주 좋은 반응에서, 당신은뿐만 아니라 이것을 시도 할 수 있습니다.

    접근하다:

    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 
       )
    
  5. from https://stackoverflow.com/questions/1904314/only-one-expression-can-be-specified-in-the-select-list-when-the-subquery-is-not by cc-by-sa and MIT license