SQL 计算每个 NPANXX 系列的语句

SQL statement to count each individual NPANXX series

我正在编写一个查询,其中一个字段是 DIAL_NUMBER。 在该字段中,有些值是 11 位数字,有些是 10 位数字。如果是 11 位数字,我需要第 2 到第 7 个字符,如果是 10 位数字,我需要第 1 到第 6 个字符。 然后我需要计算每个单独的系列。我尝试使用以下方法,但出现错误。 请帮助我确定解决方案。

select dialled number, case
when length(Dialled_Number) = '11' then Substr(Dialled_Number, 2, 7)
else Substr(Dialled_Number, 1, 6)
end
count(*)
from Error_Event

在不知道您的预期结果的情况下,我想您需要在查询中使用 group by

也许是这样的:

select case
       when length(Dialled_Number) = 11 then Substr(Dialled_Number, 2, 7)
       else Substr(Dialled_Number, 1, 6)
       end, 
    count(*)
from Error_Event
group by case
       when length(Dialled_Number) = 11 then Substr(Dialled_Number, 2, 7)
       else Substr(Dialled_Number, 1, 6)
       end

如果是 MS SQL,您可以使用 ROW_NUMBER()COUNT 函数来获得所需的输出。

DECLARE @TABLE TABLE(DIAL_NUMBER VARCHAR(20))
INSERT INTO @TABLE
SELECT '81243193812' UNION
SELECT '1829321874' UNION
SELECT '182932'


SELECT NPANXX, [Count] FROM
(
    SELECT NPANXX,
    COUNT(NPANXX) OVER (PARTITION BY NPANXX) AS [Count], DIAL_NUMBER,
    ROW_NUMBER() OVER (PARTITION BY NPANXX ORDER BY DIAL_NUMBER) RN
     FROM
    (
        SELECT DIAL_NUMBER, 
        CASE
            WHEN LEN(DIAL_NUMBER) = 11 THEN SUBSTRING(DIAL_NUMBER,2, 7)
            ELSE SUBSTRING(DIAL_NUMBER,1, 6)
        END AS NPANXX
        FROM @table
    ) Tmp
)FTMp
WHERE RN = 1

Sql Fiddle