我不能接着刚才的帖子回复,只有另发新帖
我为实现在我的程序端动态的设置查询日期段,将代码做了改动,结果执行不了,请各位有经验的朋友再度指点,谢谢。
IF OBJECT_ID('TB') IS NOT NULL  DROP TABLE TB
CREATE TABLE TB (姓名 VARCHAR(10),项目 VARCHAR(20), 数量 INT, 点钟标记 VARCHAR(4), 加班标记 VARCHAR(4), 日期 DATETIME)
INSERT INTO TB SELECT '张三','中式按摩',1,'否','是','2008-7-1' 
UNION ALL SELECT '张三','泰式按摩',1,'否','否','2008-7-1' 
UNION ALL SELECT '李四','中式按摩',2,'否','否','2008-7-1' 
UNION ALL SELECT '李四','泰式按摩',1,'是','否','2008-7-1' 
UNION ALL SELECT '王五','中式按摩',2,'否','否','2008-7-1' 
UNION ALL SELECT '张三','日式按摩',1,'否','否','2008-7-1' 
UNION ALL SELECT '李四','日式按摩',2,'否','否','2008-7-1' 
UNION ALL SELECT '王五','日式按摩',2,'否','否','2008-7-1' 
UNION ALL SELECT '王五','中式按摩',1,'是','否','2008-7-6' 
DECLARE @SQL nvarchar(4000),@开始日期 DATETIME,@结束日期 DATETIME
SET @SQL='SELECT 姓名'
set @开始日期='2008-7-1'
set @结束日期='2008-7-1'
SELECT @SQL=@SQL
        +','+QUOTENAME(项目)
        +N'=SUM(CASE 项目 WHEN '+QUOTENAME(项目,N'''')
        +N' THEN 数量 END)'
FROM TB
GROUP BY 项目
SELECT @SQL=@SQL+N',点钟数=SUM(CASE WHEN 点钟标记=''是'' THEN 1 ELSE 0 END),
加班数=SUM(CASE WHEN 加班标记=''是'' THEN 1 ELSE 0 END)
FROM TB
WHERE 日期>='+@开始日期+' AND 日期<='+@结束日期+' GROUP BY 姓名'EXECUTE  (@SQL)

解决方案 »

  1.   

    IF OBJECT_ID('TB') IS NOT NULL  DROP TABLE TB 
    CREATE TABLE TB (姓名 VARCHAR(10),项目 VARCHAR(20), 数量 INT, 点钟标记 VARCHAR(4), 加班标记 VARCHAR(4), 日期 DATETIME) 
    INSERT INTO TB SELECT '张三','中式按摩',1,'否','是','2008-7-1' 
    UNION ALL SELECT '张三','泰式按摩',1,'否','否','2008-7-1' 
    UNION ALL SELECT '李四','中式按摩',2,'否','否','2008-7-1' 
    UNION ALL SELECT '李四','泰式按摩',1,'是','否','2008-7-1' 
    UNION ALL SELECT '王五','中式按摩',2,'否','否','2008-7-1' 
    UNION ALL SELECT '张三','日式按摩',1,'否','否','2008-7-1' 
    UNION ALL SELECT '李四','日式按摩',2,'否','否','2008-7-1' 
    UNION ALL SELECT '王五','日式按摩',2,'否','否','2008-7-1' 
    UNION ALL SELECT '王五','中式按摩',1,'是','否','2008-7-6' 
    DECLARE @SQL nvarchar(4000),@开始日期 DATETIME,@结束日期 DATETIME 
    SET @SQL='SELECT 姓名' 
    set @开始日期='2008-7-1' 
    set @结束日期='2008-7-1' 
    SELECT @SQL=@SQL 
            +','+QUOTENAME(项目) 
            +N'=SUM(CASE 项目 WHEN '+QUOTENAME(项目,N'''') 
            +N' THEN 数量 END)' 
    FROM TB 
    GROUP BY 项目 
    SELECT @SQL=@SQL+N',点钟数=SUM(CASE WHEN 点钟标记=''是'' THEN 1 ELSE 0 END), 
    加班数=SUM(CASE WHEN 加班标记=''是'' THEN 1 ELSE 0 END) 
    FROM TB 
    WHERE 日期>='''+convert(varchar(10),@开始日期,120)+''' AND 日期 <='''+convert(varchar(10),@结束日期,120)+''' GROUP BY 姓名' EXECUTE  (@SQL)/*
    姓名         日式按摩        泰式按摩        中式按摩        点钟数         加班数
    ---------- ----------- ----------- ----------- ----------- -----------
    李四         2           1           2           1           0
    王五         2           NULL        2           0           0
    张三         1           1           1           0           1
    警告: 聚合或其他 SET 操作消除了 Null 值。(3 行受影响)
    */
      

  2.   

    感谢liangCK 兄弟相助,我发了在线聊天信息于您,不知愿意再帮助一下