2012-05-18 72 views
0

我想用子查詢執行以下操作,即使我可以用另一種方式執行此操作。我正在查詢一個大的聯結表,並且在那個查詢中,我想要計算出所有縣名超過X次的次數。子查詢中的varchar數據類型的聚合子句

select v.id, k.countyName 
from v inner join k on v.countyID=k.countyID inner join 
icd_jxn on v.id = icd_jxn.id 
where k.countyName in 
(select count(k.countyName) from k 
having count(k.countyName) > 10) 

給出的錯誤是conversion failed when converting the varchar value X to int。我不想做任何轉換,我只想要一些縣名出現在桌面上的時間。

enter image description here

回答

3

你內心的查詢只返回一個計數。你的查詢需要是這樣的:

select v.id, k.countyName 
from v inner join k on v.countyID=k.countyID inner join 
icd_jxn on v.id = icd_jxn.id 
where k.countyName in 
(select k.countyName from k 
group by k.countyName 
having count(k.countyName) > 10) 
+0

他們都命名爲ID字段類型爲int和countyName爲varchar – wootscootinboogie

+0

此運行,但它不會做什麼我想要的。表k沒有縣名的任何重複,外部查詢確實如此。如果我做的更大0,那麼我得到整個表(800k行)。但只要我> 1,我得到0行返回。即使有成千上萬的重複。 – wootscootinboogie

+1

然後,您需要在內部查詢中進行連接,以查找數據中每個郡的總計數 – cjk

0

你可以嘗試以下

select v.id, k.countyName 
from v inner join k on v.countyID=k.countyID 
     inner join icd_jxn on v.id = icd_jxn.id 
where k.countyName in 
(
    select k.countyName from k 
    group by k.countyName 
    having count(k.countyName) > 10 
) 

的問題是你有選擇count,並檢查你的IN子查詢的varchar類型。所以,你應該選擇countyName

+0

這不起作用,您的「IN」無法鏈接到正在返回的2列。 – cjk

+0

@cjk:我已更新我的查詢。 – sarwar026

0

您正在試圖看到國名在計數(因此比較VARCHAR到整數)

select v.id, k.countyName 
from v 
inner join k on v.countyID=k.countyID 
inner join icd_jxn on v.id = icd_jxn.id 
where k.countyName in 
(
    select k.countyName as c from k 
    having count(k.countyName) > 10 
    group by k.countyName 
) 
+1

這不起作用,你的'IN'不能被鏈接到正在返回的2列。 – cjk

+0

啊好點,嗯...(現在應該是固定的) –

0

在你查詢你compering k.CountryName VARCHAR類型Count INT類型是錯誤的原因。 試試這個

select v.id, k.countyName 
from v inner join k on v.countyID=k.countyID inner join 
icd_jxn on v.id = icd_jxn.id 
where k.countyName in 
(select k.countyName from k 
group by k.countyName 
having count(k.countyName) > 10)