table1
编号   总投资  其他费用 受理日期 审批日期
id     ztz     qt      slrq     sprq 
1      1000    50    2010-1-1   2010-1-5
2      2000    50    2010-1-3   2010-1-15
3      3000    50    2010-1-15  2010-2-3
4      4000    50    2010-1-25
能不能实现这样的效果:
结果集1:表示这个月受理的项数
select COUNT(id) as a1,sum(isnull(ztz,0)) as a2 from table1 
where (slrq  between '2010-1-1 00:00:00' and '2010-1-31 23:59:59')结果集2:表示这个月审批的项数
select COUNT(id) as a3,sum(isnull(ztz,0)), as a4,sum(isnull(qt,0)) as a5 from table1 
where (sprq  between '2010-1-1 00:00:00' and '2010-1-31 23:59:59')
最终想要实现的效果是:
a1:这个月受理项目,a2:这个月受理项目的总投资,a3:这个月审批的项数......a1    a2     a3    a4     a5  
4    10000   2     3000   100

解决方案 »

  1.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-03-30 12:01:28
    --  Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) 
    --          Mar 29 2009 10:27:29 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
    --------------------------------------------------------------------------
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([id] INT,[ztz] INT,[qt] INT,[slrq] DATETIME,[sprq] DATETIME)
    INSERT [tb]
    SELECT 1,1000,50,N'2010-1-1',N'2010-1-5' UNION ALL
    SELECT 2,2000,50,N'2010-1-3',N'2010-1-15' UNION ALL
    SELECT 3,3000,50,N'2010-1-15',N'2010-2-3' UNION ALL
    SELECT 4,4000,50,N'2010-1-25',NULL
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select sum(case when slrq between '2010-1-1 00:00:00' and '2010-1-31 23:59:59' then 1 else 0 end) as a1,
    sum(case when slrq between '2010-1-1 00:00:00' and '2010-1-31 23:59:59' then isnull(ztz,0) else 0 end) as a2, 
    sum(case when sprq between '2010-1-1 00:00:00' and '2010-1-31 23:59:59' then 1 else 0 end) as a3,
    sum(case when sprq between '2010-1-1 00:00:00' and '2010-1-31 23:59:59' then isnull(ztz,0) else 0 end) as a4, 
    sum(case when sprq between '2010-1-1 00:00:00' and '2010-1-31 23:59:59' then isnull(qt,0) else 0 end) as a5
    from tb /*
    a1          a2          a3          a4          a5
    ----------- ----------- ----------- ----------- -----------
    4           10000       2           3000        100(1 行受影响)
    */
      

  2.   

    -->SQL查询如下:
    declare @bt datetime,@et datetime
    select @bt='2010-1-1 00:00:00',@et='2010-1-31 23:59:59'
    select sum(case when slrq between @bt and @et then 1 else 0 end) as a1,
    sum(case when slrq between @bt and @et then isnull(ztz,0) else 0 end) as a2, 
    sum(case when sprq between @bt and @et then 1 else 0 end) as a3,
    sum(case when sprq between @bt and @et then isnull(ztz,0) else 0 end) as a4, 
    sum(case when sprq between @bt and @et then isnull(qt,0) else 0 end) as a5
    from tb /*
    a1          a2          a3          a4          a5
    ----------- ----------- ----------- ----------- -----------
    4           10000       2           3000        100(1 行受影响)
    */通常用变量封装在过程内
      

  3.   

     
    to: htl258谢谢