在如下数据表中,同时得到属于a01 的num列,和a02的 num列
tdatetime               cmname         num
2008-10-10 08:00:00.000 A01        3
2008-10-10 08:00:00.000 A02        4
2008-10-10 08:00:00.000 B01        30
2008-10-10 08:00:00.000 B02        40
2008-10-11 08:00:00.000 A01        5
2008-10-11 08:00:00.000 A02        6
2008-10-11 08:00:00.000 B01        50
2008-10-11 08:00:00.000 B02        60
DECLARE @CMName CHAR(10),@startDate DATETIME,@EndDate DATETIME
SET @CMName ='A01'
SET @startDate ='2008-01-28 9:53:49'
SET @EndDate='2008-12-30 10:09:24'--下面这段SQL 只能得到'A01'时的增量。
--我希望能同时得到'A02'的增量,即同时得到两个类别的增量。
SELECT CONVERT(CHAR(7),tDateTime,121) 时间,MAX(num)-MIN(num) 增量 FROM bxinlianxu
WHERE CMName=@CMName and CONVERT(CHAR(7),tDateTime,121) BETWEEN CONVERT(CHAR(7),@startDate,121) AND CONVERT(CHAR(7),@EndDate,121)
GROUP BY CONVERT(CHAR(7),tDateTime,121) 构建测试表。
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bxinlianxu]') and OBJECTPROPERTY(id,  N'IsUserTable') = 1)
drop table [dbo].[bxinlianxu]
GOCREATE TABLE [dbo].[bxinlianxu] (
[tDateTIme] [datetime] NULL ,
[cmName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[num] [int] NULL 
) ON [PRIMARY]
GOinsert   blianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'A01       ' , 3 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'A02       ' , 4 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'B01       ' , 30 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-10 08:00:00.000' , 'B02       ' , 40 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-11 08:00:00.000' , 'A01       ' , 5 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-11 08:00:00.000' , 'A02       ' , 6 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-11 08:00:00.000' , 'B01       ' , 50 )
insert   blianxu(tDateTIme,cmName,num)   values( '2008-10-11 08:00:00.000' , 'B02       ' , 60 ) 
 

解决方案 »

  1.   

    DECLARE @CMName varCHAR(30),@startDate DATETIME,@EndDate DATETIME 
    SET @CMName ='(''A01'',''A02'')' 
    SET @startDate ='2008-01-28 9:53:49' 
    SET @EndDate='2008-12-30 10:09:24' exec('
    SELECT CONVERT(CHAR(7),tDateTime,121) 时间,MAX(num)-MIN(num) 增量 FROM bxinlianxu 
    WHERE CMName in ' + @CMName + ' and CONVERT(CHAR(7),tDateTime,121) BETWEEN ''' + CONVERT(CHAR(7),@startDate,121) + ''' AND ''' + CONVERT(CHAR(7),@EndDate,121) + '''
    GROUP BY CONVERT(CHAR(7),tDateTime,121)
    ')
      

  2.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bxinlianxu]') and OBJECTPROPERTY(id,  N'IsUserTable') = 1) 
    drop table [dbo].[bxinlianxu] 
    GO CREATE TABLE [dbo].[bxinlianxu] ( 
    [tDateTIme] [datetime] NULL , 
    [cmName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , 
    [num] [int] NULL 
    ) ON [PRIMARY] 
    GO insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-10 08:00:00.000' , 'A01      ' , 3 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-10 08:00:00.000' , 'A02      ' , 4 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-10 08:00:00.000' , 'B01      ' , 30 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-10 08:00:00.000' , 'B02      ' , 40 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-11 08:00:00.000' , 'A01      ' , 5 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-11 08:00:00.000' , 'A02      ' , 6 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-11 08:00:00.000' , 'B01      ' , 50 ) 
    insert  bxinlianxu(tDateTIme,cmName,num)  values( '2008-10-11 08:00:00.000' , 'B02      ' , 60 )select * from bxinlianxuDECLARE @CMName CHAR(10),@startDate DATETIME,@EndDate DATETIME 
    SET @CMName ='A01' 
    SET @startDate ='2008-01-28 9:53:49' 
    SET @EndDate='2008-12-30 10:09:24' --下面这段SQL 只能得到'A01'时的增量。 
    --我希望能同时得到'A02'的增量,即同时得到两个类别的增量。 
    SELECT CONVERT(CHAR(7),tDateTime,121) 时间,cmname,MAX(num)-MIN(num) 增量 FROM bxinlianxu 
    WHERE  CONVERT(CHAR(7),tDateTime,121) BETWEEN CONVERT(CHAR(7),@startDate,121) AND CONVERT(CHAR(7),@EndDate,121) 
    GROUP BY CONVERT(CHAR(7),tDateTime,121),cmnamedrop table bxinlianxu
    /*
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)tDateTIme                                              cmName     num         
    ------------------------------------------------------ ---------- ----------- 
    2008-10-10 08:00:00.000                                A01        3
    2008-10-10 08:00:00.000                                A02        4
    2008-10-10 08:00:00.000                                B01        30
    2008-10-10 08:00:00.000                                B02        40
    2008-10-11 08:00:00.000                                A01        5
    2008-10-11 08:00:00.000                                A02        6
    2008-10-11 08:00:00.000                                B01        50
    2008-10-11 08:00:00.000                                B02        60(所影响的行数为 8 行)时间      cmname     增量          
    ------- ---------- ----------- 
    2008-10 A01        2
    2008-10 A02        2
    2008-10 B01        20
    2008-10 B02        20(所影响的行数为 4 行)*/
      

  3.   

     To Haiwer :
       你理解错我的意思了。依据如上数据表,我自己的代码得到
    A01        2008-10 2=5-3
       你的代码得到
    (A01,A02)  2008-10 3=6-3
    ======================
     我想得到的是:
    A01        2008-10 2=5-3 同时 A02       2008-10 2=5-3
    即生成数据集如下:
    时间     A01增  A02增 
    2008-10  2     2
    ======================

    你的代码我理解为:
    [code=
    SELECT CONVERT(CHAR(7),tDateTime,121) 时间,MAX(num)-MIN(num) 增量 FROM bxinlianxu 
    WHERE CMName in('a02','a02') and CONVERT(CHAR(7),tDateTime,121) BETWEEN CONVERT(CHAR(7),@startDate,121) AND CONVERT(CHAR(7),@EndDate,121) 
    GROUP BY CONVERT(CHAR(7),tDateTime,121) 
    ][/code]
      

  4.   

    To conan304 
    谢谢,刚学会这么发代码。SELECT CONVERT(CHAR(7),tDateTime,121) 时间,MAX(num)-MIN(num) 增量 FROM bxinlianxu 
    WHERE CMName in('a02','a02') and CONVERT(CHAR(7),tDateTime,121) BETWEEN CONVERT(CHAR(7),@startDate,121) AND CONVERT(CHAR(7),@EndDate,121) 
    GROUP BY CONVERT(CHAR(7),tDateTime,121)