有没有办法按行对表格进行分组,其值适合某个范围?

时间:2017-03-02 15:39:08

标签: sql sql-server

我有这张桌子:

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]      NVARCHAR (250)   NOT NULL,
    [Kanji]        NVARCHAR (MAX)   NULL,
    [KanjiUnicode] AS               (unicode([Kanji])) PERSISTED,
    PRIMARY KEY CLUSTERED ([PhraseId] ASC)
);

KanjiUnicode列的值介于20,000和40,000之间

有没有办法可以对此表中的行进行分组,这样我就可以看到有多少行的KanjiUnicode值为

20000 - 20099
20100 - 20199
20200 - 20299

etc

总共40个小组

我需要做的是尝试获取适合这些组的行数。我从未见过任何可以执行此操作的查询SQL,并且有兴趣听听是否有人可以想出一个方法来获取此报告

3 个答案:

答案 0 :(得分:0)

编辑:使用子查询来派生范围,并在外部查询中进行分组。可能有更优雅的方式这样做,但这是我现在可以想到的。

select range,count(*) as cnt from 
(
select
case 
when KanjiUnicode between 20000 and 20099 then '20000 - 20099'
when KanjiUnicode between 20100 and 20199 then '20100 - 20199'
-- and so on
end as range 
from [dbo].[Phrase] t
) t1
group by range

答案 1 :(得分:0)

这对你有用吗?

string1[::12]

答案 2 :(得分:0)

SELECT SUM(CASE 
        WHEN [KanjiUnicode] BETWEEN 20000
                AND 20099
            THEN 1
        ELSE 0
        END) AS [20000 - 20099]
,SUM(CASE 
        WHEN [KanjiUnicode] BETWEEN 20100
                AND 20199
            THEN 1
        ELSE 0
        END) AS [20100 - 20199]
,SUM(CASE 
        WHEN [KanjiUnicode] BETWEEN 20200
                AND 20299
            THEN 1
        ELSE 0
        END) AS [20200 - 20299]
FROM [dbo].[Phrase]

OR

SELECT LEFT([KanjiUnicode], 3) + '00-99' AS KanjiUnicodeRange
,COUNT(*) AS RecordCount
FROM [dbo].[Phrase]
GROUP BY LEFT([KanjiUnicode], 3)