我有一个表(sql 2008),其中 col1 中的 A、B、C、D、E 值有没有办法获取按 col1 分组的计数,以便返回的结果为
A - #
B - #
other - #
谢谢
我有一个表(sql 2008),其中 col1 中的 A、B、C、D、E 值有没有办法获取按 col1 分组的计数,以便返回的结果为
A - #
B - #
other - #
谢谢
重复这个CASE
表达式是可行的,但我发现只执行一次该表达式并不那么乏味。计划是相同的。
;WITH x AS
(
SELECT Name = CASE WHEN Name IN ('A','B') THEN Name
ELSE 'Other' END
FROM dbo.YourTable
)
SELECT Name, COUNT(*) FROM x
GROUP BY Name;
如果排序很重要(例如Other
,应该是结果中的最后一行,即使其他名称按字母顺序排列在其后),那么您可以说:
ORDER BY CASE WHEN Name = 'Other' THEN 1 ELSE 0 END, Name;
select
case when col1 in ('a','b') then col1 else 'other' end,
count(*)
from tab
group by case when col1 in ('a','b') then col1 else 'other' end
SELECT res.col1, COUNT(*)
FROM
(SELECT
(CASE col1 WHEN 'A' THEN 'A'
WHEN 'B' THEN 'B'
ELSE 'other'
END) as col1
FROM table ) as res
GROUP BY col1
SELECT CASE col1
WHEN a then 'nameofnewcolumn'
WHEN b then 'nameofnewcolumn'
ELSE 'other'
END
FROM TABLE
这应该将所有值分组到列中,而 else 将不适合 OTHER 组的所有内容分组。
尝试这个:
SELECT ColumnName, COUNT(ColumnName)
FROM NyTable
GROUP BY ColumnName
SELECT col1, COUNT(col1)
FROM mytable
WHERE col1 IN ('A', 'B')
GROUP BY col1
UNION
SELECT col1, COUNT(col1)
FROM mytable
WHERE col1 IS NULL OR col1 NOT IN ('A','B')
GROUP BY col1
ORDER BY col1
如果“other”应该是最后一行,而“A”、“B”实际上可以是任意的(例如“plums”、“zillion”),则可以使用以下内容:
;with cte as (
select
col1 = case when t.col1 in ('A', 'B') then t.Col1 else 'other' end,
ordnum = case when t.col1 in ('A', 'B') then 0 else 1 end
from TableName
)
select col1, count(1)
from cte
group by col1
order by ordnum, col1