2012-05-02 41 views
0

我目前正在与查询联盟SQL查询

SELECT sex, count(sex) as [count], problem1, problem2, problem3 
from myTable 
group by sex, problem1, problem2, problem3 
order by sex, problem1, problem2, problem3 

演奏,这也会给我所有可能的位cominbations的计数每次做爱(1,1,1或1,01)等

有什么办法可以使用联合查询来获得额外列中的男性和女性的总数?

所以

enter image description here

性别统计问题1 problem2 problem3(性别的计数放在这里)

如果我不能做到这一点对男女,是有办法,我能做到这一点的只有一个?

编辑:最后一列,女性总数是我想补充的。

+0

联合在额外的列? –

+0

另外 - 我不明白你的数据....(位组合?) –

+1

奇怪。您将agregate函数(count)应用于字段SEX,并在GROUP BY子句中提供它...您可以显示表结构并解释业务逻辑吗? – heximal

回答

1

你可以做到这一点使用临时表。但请注意:您的计数将针对特定性别的每一行重复。

CREATE TABLE #Temp 
(
    sex varchar(10), -- or whatever datatype you are using 
    totalCount INT 
) 

INSERT INTO #Temp 
(
    sex, 
    totalCount 
) 
SELECT 
    sex, 
    count(1) 
FROM 
    myTable 
GROUP BY 
    sex 

SELECT m.sex, count(m.sex) as [count], m.problem1, m.problem2, m.problem3, t.totalCount 
from myTable AS m 
JOIN #Temp AS t 
ON t.sex = m.sex 
group by m.sex, m.problem1, m.problem2, m.problem3, t.totalCount 
order by m.sex, m.problem1, m.problem2, m.problem3, t.totalCount 
1

不知道其中UNION应该去,但如果你想扩展与附加列,其中包括所有项目的COUNT的结果集,你可以使用以下命令:

SELECT sex, count(sex) as [count], problem1, problem2, problem3, (select count(1) from myTable) as TotalCount 
from myTable 
... 

顺便说一句,不知道你想这样做,因为所有行的值都是相同的。通常,我们将编写一个单独的查询。

1
SELECT sex, count(sex) as [count], problem1, problem2, problem3, s.s_total 
from myTable 
, (select count(sex) s_total from mytable) s 
group by sex, problem1, problem2, problem3, s.s_total 
order by sex, problem1, problem2, problem3 

,你可以做任何你在子查询部分喜欢

(编辑 - 需要按相同s_total)

+0

s.s_total代表什么? – wootscootinboogie

+1

s是该内联视图的别名... s_total是内部总计数的列别名。 – Randy