(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2,120)+' 05:00' and convert(varchar(10),vdatetime2,120)+' 22:59' then '白天'else '夜间' end) as '时段'各位老师谁能帮我改下,按照我的写法改成前夜、后夜。前夜时间段是21点到0点,后夜时间段是0.01到5点。
调试欢乐多
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
(case when vdatetime2 between CONVERT(varchar(10),vdatetime2,120)+' 05:00'
and CONVERT(varchar(10),vdatetime2,120)+' 20:59' then '白天'
when vdatetime2 between CONVERT(varchar(10),vdatetime2,120)+' 21:00'
and CONVERT(varchar(10),vdatetime2,120)+' 23:59' then '前夜'
else '后夜' end)
case when
vdatetime2
between
CONVERT(varchar(10),vdatetime2,120)+' 05:00'
and
CONVERT(varchar(10),vdatetime2,120)+' 20:59' then '白天'
when
vdatetime2
between CONVERT(varchar(10),vdatetime2,120)+' 21:00'
and
CONVERT(varchar(10),vdatetime2,120)+' 23:59' then '前夜'
else
'后夜' end
)
姓名 类别 时间
王 A 2010-1-30
王 A 2010-1-31
王 a 2010-1-16
显示:
姓名 数量 周末次数
王 3 2
一周计算一次呢?就是说一个周六周日算一次,
姓名 类别 时间
王 A 2010-1-30
王 A 2010-1-31
王 a 2010-1-16
显示:
姓名 数量 周末次数
王 3 2
一周计算一次呢?就是说一个周六周日算一次,
然后:双休日=sum(双休日),
可是这样就成周末次数3次了
-- Author :SQL77(只为思齐老)
-- Date :2010-01-28 20:51:32
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
go
create table #TB([姓名] varchar(2),[类别] varchar(1),[时间] datetime)
insert #TB
select '王','A','2010-1-30' union all
select '王','A','2010-1-29' union all
select '王','A','2010-1-31' union all
select '王','a','2010-1-16' union all
select '王','a','2010-1-17'
--------------开始查询--------------------------
select
姓名,类别,时间,
CASE WHEN DATEPART(DW,时间)=7 THEN 1 ELSE DATEPART(DW,时间) END AS 星期几 ,
CASE WHEN DATEPART(DW,时间)=1 THEN DATEPART(WK,时间)-1 ELSE DATEPART(WK,时间) END AS 第几周 INTO #Tfrom #TBSELECT
姓名,
类别,
(SELECT COUNT(*) FROM #T WHERE 姓名=T.姓名 AND 类别=T.类别)AS 数量,
COUNT(DISTINCT LTRIM(星期几)+LTRIM(第几周)) AS 周末次数
FROM #T TGROUP BY 姓名,类别--DROP TABLE #T,#TB
----------------结果-- --------------------------
/* (所影响的行数为 5 行)
(所影响的行数为 5 行)姓名 类别 数量 周末次数
---- ---- ----------- -----------
王 a 5 3(所影响的行数为 1 行)
*/