SQL查询中的UNION

时间:2012-05-02 19:17:55

标签: sql tsql

我正在玩查询

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

这将给我一个每个性别(1,1,1或1,01)等所有可能的位数的计数

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

所以

enter image description here

性别问题1问题2问题3(性别数量在这里)

如果我不能为两性都这样做,有没有办法让我只做一个?

编辑:最后一栏,女性总数是我想要添加的内容。

3 个答案:

答案 0 :(得分:1)

不确定UNION应该去哪里,但如果您希望使用包含COUNT所有项目的附加列扩展结果集,则可以使用以下内容:

SELECT sex, count(sex) as [count], problem1, problem2, problem3, (select count(1) from myTable) as TotalCount
from myTable
...
BTW,不确定你是否愿意这样做,因为所有行的值都是相同的。通常,我们会写一个单独的查询。

答案 1 :(得分: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分组)

答案 2 :(得分: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