读书人

借人气 求SQL解决方案

发布时间: 2012-02-27 10:00:22 作者: rapoo

借人气 求SQL
表结构字段和数据如下:
CustomerName ArriveTime FactTime --客户名称 应到达时间 实际到达时间
联想集团 08:00 08:15
康佳 09:00 09:30
康佳 09:00 09:00
康佳 09:00 09:20
联想集团 08:00 08;00
TCL 08:30 09;00

如果 ArriveTime小于FactTime就代表迟到
要求汇总结果如下
客户名称 迟到次数 总次数
联想集团 1 2
康佳 2 3
TCL 1 1


[解决办法]
你是什么数据库,你的时间字段是什么类型的
[解决办法]
up
[解决办法]
select x.customerName, x.late, y.total
from
(
select customerName, count(1) as late
from
(
select *
from yourtable
where arrivetime < facttime
) a
group by customerName
) x
inner join
(
select customerName, count(1) as total
from yourtable
group by customerName
) y
on x.customerName = y.customerName


[解决办法]
借用一下上面创建的表 语句如下
===================
select a.customerName as 客户名称,sum(a.flat) as 迟到次数 ,count(customerName) as 总次数 from
(select customerName,case when arrivetime <facttime then 1 else 0 end as flat
from yourtable) as a
group by a.customerName

==================
我解释一下语句
select customerName,case when arrivetime <facttime then 1 else 0 end as flat
from yourtable
得出每条记录得迟到情况 迟到为1 否则为0

然后对其分组 求和 求次数 就可以了

[解决办法]
是不是都想了,句不需要用到子查的,一Select就可以的


Select
CustomerName,
SUM(Case When ArriveTime < FactTime Then 1 Else 0 End) As 迟到次数,
Count(*) As 总次数
From
TEST
Group By
CustomerName

读书人网 >asp.net

热点推荐