SQL统计

c48111926 2010-01-18 07:59:02
四个字段。1名字Inspect_name,2类别rank,3时间vdatetime2,4录入时长vtime。我要列出所查天所有用户RANK的A记录数,王输入多少条信息,只要vtime当天记录相加和不大于120那么就不显示,如果王输入1000条记录当天vtime相加大于120那么就算1条,如果vtime相加不大于120就算用户输入100条也不算我想按天统计比如
Inspect_name rank vdatetime2 vtime
王 A 2010-1-15 10:15 110
王 A 2010-1-15 15:10 30
张 A 2010-1-15 10:15 90
张 A 2010-1-16 2:15 100
刘 A 2010-1-16 3:15 100
刘 A 2010-1-16 2:15 40
select Inspect_name,
A=sum(case when A>120 then 1 else 0 end),
夜间=sum(case when 夜间>120 then 1 else 0 end)
from
(select Inspect_name,
convert(varchar(10),vdatetime2,120) as vdatetime2,
sum(case when rank= 'A' then vtime else 0 end) A,
夜间= sum(case when right(convert(varchar(16),intime,120),5) between '23:00' and '23:59' or right(convert(varchar(16),intime,120),5) between '00:00' and '05:00' then vtime else 0 end),from jcxs
group by
Inspect_name, convert(varchar(10),vdatetime2,120) )t group by Inspect_name
可以列出 inspect A 夜间
王 1 0
张 0 0
能把convert(varchar(10),vdatetime2,120)的0-24点改成 比如今天5点-到4.59?我想查15号的信息就显示
inspect A 夜间
王 1 0
张 1 1
刘 1 1

如果查16号inspect A 夜间
0 0 0也就是说刘录入的信息被记录在15号夜间里面了

...全文
100 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liguicd 2010-01-21
  • 打赏
  • 举报
回复
只帮顶
幸运的意外 2010-01-19
  • 打赏
  • 举报
回复
一看到常题目就晕了。呵呵。
spidershark 2010-01-19
  • 打赏
  • 举报
回复
已经有人写好了呀
c48111926 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sql77 的回复:]
SQL code----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-01-18 21:26:11
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
?-
[/Quote](case when convert(varchar(16),vdatetime2,120) between CONVERT(varchar(100),vdatetime2 ,23) + ' 22:59'
and convert(varchar(10),vdatetime2 ,120)+' 23:59'
then convert(varchar(10),vdatetime2 +1,120)
else convert(varchar(10),vdatetime2,120) end) as vdatetime21,老师改成昨天23点到明天5点怎么改?
C30018291 2010-01-18
  • 打赏
  • 举报
回复
select Inspect_name, 检查次数=sum(case when 数量>120 then 1 else 0 end),
A=sum(case when A>120 then 1 else 0 end),
昼间=sum(case when 昼间>120 then 1 else 0 end),
夜间=sum(case when 夜间>120 then 1 else 0 end)
from
(select Inspect_name, vdatetime2,
数量= sum(vtime),
sum(case when rank= 'A' then vtime else 0 end) A,
昼间= sum(case when 时段='白天' then vtime else 0 end),
夜间= sum(case when 时段='夜间' then vtime else 0 end)
from
(select Inspect_name, rank,
(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2 -1,120)+' 23:00'
and convert(varchar(10),vdatetime2,120)+' 04:59'
then convert(varchar(10),vdatetime2 -1,120)
else convert(varchar(10),vdatetime2,120) end) as vdatetime2,
(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2 -1,120)+' 23:00'
and convert(varchar(10),vdatetime2,120)+' 04:59'
then '夜间'
else '白天' end) as '时段',
vtime
from jcxs
) t group by Inspect_name, vdatetime2
) Tbl group by Inspect_name
SQL77 2010-01-18
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-01-18 21:26:11
-- 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([Inspect_name] varchar(2),[rank] varchar(1),[vdatetime2] datetime,[vtime] int)
insert #TB
select '王','A','2010-1-15 10:15',110 union all
select '王','A','2010-1-15 15:10',30 union all
select '张','A','2010-1-15 10:15',90 union all
select '张','A','2010-1-16 2:15',100 union all
select '刘','A','2010-1-16 3:15',100 union all
select '刘','A','2010-1-16 2:15',40
--------------开始查询--------------------------



SELECT

Inspect_name,

SUM(DISTINCT CASE WHEN rank='A' THEN 1 ELSE 0 END)A,
SUM(DISTINCT CASE WHEN 时段='夜间' THEN 1 ELSE 0 END)AS '夜间'
FROM
(SELECT Inspect_name,
rank ,
CASE WHEN CONVERT(VARCHAR(8),vdatetime2,108)>'05'
THEN CONVERT(VARCHAR(10),vdatetime2,120)
ELSE CONVERT(VARCHAR(10),vdatetime2-1,120) END AS vdatetime2,
vtime,

CASE WHEN vdatetime2
BETWEEN CONVERT(VARCHAR(10),vdatetime2-1,120)+' 23:59:59'
AND CONVERT(VARCHAR(10),vdatetime2,120)+' 05:00:00'
THEN '夜间' ELSE '白天' END AS 时段

from #TB)AS T GROUP BY Inspect_name

HAVING SUM(vtime)>120 OR SUM(CASE WHEN 时段='夜间' THEN vtime ELSE 0 END)>120


----------------结果----------------------------
/*
(所影响的行数为 6 行)

Inspect_name A 夜间
------------ ----------- -----------
刘 1 1
王 1 0
张 1 1

(所影响的行数为 3 行)



*/
c48111926 2010-01-18
  • 打赏
  • 举报
回复
select Inspect_name,
A=sum(case when A>120 then 1 else 0 end),
夜间=sum(case when 夜间>120 then 1 else 0 end)
from
(select Inspect_name,
convert(varchar(10),vdatetime2,120) as vdatetime2,
sum(case when rank= 'A' then vtime else 0 end) A,
夜间= sum(case when right(convert(varchar(16),intime,120),5) between '23:00' and '23:59' or right(convert(varchar(16),intime,120),5) between '00:00' and '05:00' then vtime else 0 end),from jcxs
group by
Inspect_name, convert(varchar(10),vdatetime2,120) )t group by Inspect_name
我能够在convert(varchar(10),vdatetime2,120)范围内统计出 15号、16号的记录
王 1 0
张 1 0
刘 1 1
可是我想查16号时就什么都没有,刘应该在15号里。也就是说我想以每天的5点到第二天的5点来进行时长相加记录,那样一来16号就应该是从5.01开始统计,所有16号就应该没有记录
SQL77 2010-01-18
  • 打赏
  • 举报
回复
米看懂规则
c48111926 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
发了两遍?
[/Quote]恩。第一次觉得分给的少所有就发了两遍,其实不长
select Inspect_name,
A=sum(case when A>120 then 1 else 0 end),
夜间=sum(case when 夜间>120 then 1 else 0 end)
from
(select Inspect_name,
convert(varchar(10),vdatetime2,120) as vdatetime2,
sum(case when rank= 'A' then vtime else 0 end) A,
夜间= sum(case when right(convert(varchar(16),intime,120),5) between '23:00' and '23:59' or right(convert(varchar(16),intime,120),5) between '00:00' and '05:00' then vtime else 0 end),from jcxs
group by
Inspect_name, convert(varchar(10),vdatetime2,120) )t group by Inspect_name
可以列出 inspect A 夜间
王 1 0
张 0 0
能把convert(varchar(10),vdatetime2,120)的0-24点改成 比如今天5点-到4.59?我想查15号的信息就显示
--小F-- 2010-01-18
  • 打赏
  • 举报
回复
发了两遍?
playwarcraft 2010-01-18
  • 打赏
  • 举报
回复
太长了,帮顶~~

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧