2012-05-18 41 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)