最近用存储过程+asp.net做一个 sql大量数据的统计,如下图结果:目前来说.如图所统计的是满足条件的suncount字段的数字和,现在想得到满足条件的记录有多少条(也就是说产生数字和'895'是有多少条记录的suncount字段相加得到的),改了好长时间都没搞定,希望好心的高手指导,真诚感谢.目前存储为:
CREATE  procedure Corss
@strTabName as varchar(50) = 'XLSPDF',--要处理的数据表
@strCol as varchar(50) = 'AA',--被统计字段类型
@strGroup as varchar(50) = '[ARC Number For Trans]',--分组字段
@strNumber as varchar(50) = 'sumcount', --被统计的字段
@strSum as varchar(10) = 'Sum' --运算方式
AS
DECLARE @strSql as varchar(1000), @strTmpCol as varchar(100)
EXECUTE ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT ' + @strCol +' from ' + @strTabName + ' for read only ') --生成游标
begin
SET nocount ON 
SET @strsql ='select ' + @strGroup + ', ' + @strSum + '(' + @strNumber + ') AS [' + @strNumber + ']' --查询的前半段
OPEN corss_cursor
while (0=0)
BEGIN
FETCH NEXT FROM corss_cursor --遍历游标,将列头信息放入变量@strTmpCol
INTO @strTmpCol
if (@@fetch_status<>0) break
SET @strsql = @strsql + ', ' + @strSum + '(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN ' + @strNumber + ' ELSE Null END) AS ['  + @strTmpCol +  ']' --构造查询
END
SET @strsql = @strsql + ' from ' + @strTabname + ' group by ' + @strGroup --查询结尾
EXECUTE(@strsql) --执行
IF @@error <>0 RETURN @@error --如果出错,返回错误代码
CLOSE corss_cursor 
DEALLOCATE corss_cursor RETURN 0 --释放游标,返回0表示成功
end
GO

解决方案 »

  1.   

    图片无法显示,就手动列举下:
    ARC Number For Trans            sumcount       1P      1V      AA
    1223665411                        1200         895     205     100
    1235254654                        2361         2000            361
    1235665465                        1230         1230
      

  2.   

    大致如下
    CREATE  procedure Corss 
    @strTabName as varchar(50) = 'XLSPDF',--要处理的数据表 
    @strCol as varchar(50) = 'AA',--被统计字段类型 
    @strGroup as varchar(50) = '[ARC Number For Trans]',--分组字段 
    @strNumber as varchar(50) = 'sumcount', --被统计的字段 
    @strSum as varchar(10) = 'Sum' --运算方式 
    AS 
    DECLARE @strSql as varchar(1000), @strTmpCol as varchar(100) 
    EXECUTE ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT ' + @strCol +' from ' + @strTabName + ' for read only ') --生成游标 
    begin 
    SET nocount ON 
    SET @strsql ='select ' + @strGroup + ', ' + @strSum + '(' + @strNumber + ') AS [' + @strNumber + ']' --查询的前半段 
    SET @strsql = @strsql + ', COUNT(' + @strNumber + ') AS [' + @strNumber + '_count]' -- 统计记录数
    OPEN corss_cursor 
    while (0=0) 
    BEGIN 
    FETCH NEXT FROM corss_cursor --遍历游标,将列头信息放入变量@strTmpCol 
    INTO @strTmpCol 
    if (@@fetch_status <>0) break 
    SET @strsql = @strsql + ', ' + @strSum + '(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN ' + @strNumber + ' ELSE Null END) AS ['  + @strTmpCol +  ']' --构造查询 
    SET @strsql = @strsql + ', SUM(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN 1 ELSE 0 END) AS ['  + @strTmpCol +  '_count]' --构造记录数统计查询 
    END 
    SET @strsql = @strsql + ' from ' + @strTabname + ' group by ' + @strGroup --查询结尾 
    EXECUTE(@strsql) --执行 
    IF @@error <>0 RETURN @@error --如果出错,返回错误代码 
    CLOSE corss_cursor 
    DEALLOCATE corss_cursor RETURN 0 --释放游标,返回0表示成功 
    end 
    GO 
      

  3.   


    CREATE  procedure Corss 
    @strTabName as varchar(50) = 'XLSPDF',--要处理的数据表 
    @strCol as varchar(50) = 'AA',--被统计字段类型 
    @strGroup as varchar(50) = '[ARC Number For Trans]',--分组字段 
    @strNumber as varchar(50) = 'sumcount', --被统计的字段 
    @strSum as varchar(10) = 'Sum', --运算方式 
    @s datetime,
    @e datetime
    AS 
    DECLARE @strSql as varchar(1000), @strTmpCol as varchar(100) 
    EXECUTE ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT ' + @strCol +' from ' + @strTabName + ' for read only ') --生成游标 
    begin 
    SET nocount ON 
    SET @strsql ='select ' + @strGroup + ', ' + @strSum + '(' + @strNumber + ') AS [' + @strNumber + ']' --查询的前半段 
    SET @strsql = @strsql + ', COUNT(' + @strNumber + ') AS [' + @strNumber + '_count]' -- 统计记录数
    OPEN corss_cursor 
    while (0=0) 
    BEGIN 
    FETCH NEXT FROM corss_cursor --遍历游标,将列头信息放入变量@strTmpCol 
    INTO @strTmpCol 
    if (@@fetch_status <>0) break 
    SET @strsql = @strsql + ', ' + @strSum + '(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN ' + @strNumber + ' ELSE Null END) AS ['  + @strTmpCol +  ']' --构造查询 
    SET @strsql = @strsql + ', SUM(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN 1 ELSE 0 END) AS ['  + @strTmpCol +  '_count]' --构造记录数统计查询 
    END 
    If @s is not null and @e is not null
        SET @strsql = @strsql + ' from ' + @strTabname +'where Datecol between '''+convert(char(19),@s,120)+''' and '''+convert(char(19),@e,120+ ''' group by ' + @strGroup --查询结尾 
    else
       SET @strsql = @strsql + ' from ' + @strTabname + ' group by ' + @strGroup --查询结尾
    EXECUTE(@strsql) --执行 
    IF @@error <>0 RETURN @@error --如果出错,返回错误代码 
    CLOSE corss_cursor 
    DEALLOCATE corss_cursor RETURN 0 --释放游标,返回0表示成功 
    end 
    GO