Alt sorgu EXISTS ile kullanılmadığında, seçim listesinde yalnızca bir ifade belirtilebilir


178

Sorgum aşağıdaki gibidir ve içinde bir alt sorgu içerir:

 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)

Aldığım hata ...

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

Alt sorguyu tek başına çalıştırdığımda, ana sorguyla ilgili bir sorun olduğunu varsayarak gayet iyi döner, bu yüzden?

Yanıtlar:


231

Yan tümcede karşılaştırma yapmak için alt sorgunuzda iki (veya birden çok) sütun döndüremezsiniz WHERE A_ID IN (subquery); hangi sütunda karşılaştırılması A_IDgerekir? Alt sorgunuz yalnızca IN. Bu nedenle, sorgu şu biçimde olmalıdır:

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

Ayrıca yalnızca üst satırlardan seçim yapabilmek için sıralama eklemek istersiniz, ancak sıralamanızı yapmak için COUNT öğeyi sütun olarak döndürmeniz gerekmez; ORDERyan tümcesinde sıralama , sorgu tarafından döndürülen sütunlardan bağımsızdır.

Bunun gibi bir şey deneyin:

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

Döndürülen değeri bir değişkene atadığınız konum sorgusunda yalnızca bir sütun ve bir satır döndürmelisiniz. Misal:

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
Bana yardımcı olmadı. Bana aynı hatayı veriyor. Sütunu belirtmek *bana yardımcı oldu.
Mohammedsalim Shivani

11

Hakkında şikayet ediyor

COUNT(DISTINCT dNum) AS ud 

alt sorgu içinde. Varolan bir sorguyu gerçekleştirmediğiniz sürece alt sorgudan yalnızca bir sütun döndürülebilir. Neden aynı sütunda iki kez bir sayım yapmak istediğinizden emin değilim, yüzeysel olarak yaptığınız şeye gereksiz görünüyor. Buradaki alt sorgu yalnızca birleştirme ile aynı olmayan bir filtredir . yani veriyi kısıtlamak için kullanırsınız, hangi sütunların geri alınacağını belirtmezsiniz.


Bazen, sorgu sonuçlarına karşı katılabilirsiniz ve bu sorunu çözecektir!
JosephDoggie

5

Buradaki çok iyi yanıtların yanı sıra, alt sorgunuzu olduğu gibi kullanmak istiyorsanız da bunu deneyebilirsiniz.

Yaklaşmak:

1) Alt sorgunuzdan istediğiniz sütunu (Yalnızca 1) seçin

2) Sütun adının nerede eşleneceğini kullanın

Kod:

 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 
   )
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.