我不能接着刚才的帖子回复,只有另发新帖
我为实现在我的程序端动态的设置查询日期段,将代码做了改动,结果执行不了,请各位有经验的朋友再度指点,谢谢。
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)
我为实现在我的程序端动态的设置查询日期段,将代码做了改动,结果执行不了,请各位有经验的朋友再度指点,谢谢。
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)
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 行受影响)
*/