SQL查询的问题,大神请进.........急有下列表create table test(RiQi datetime,ShuLiang int,JieGuo nvarch
SQL查询的问题,大神请进.........急
有下列表
create table test(RiQi datetime,ShuLiang int,JieGuo nvarchar(50))
insert test values('2013-2-1',10,'成功')
insert test values('2013-2-2',20,'失败')
insert test values('2013-2-3',10,'失败')
insert test values('2013-2-4',40,'成功')
insert test values('2013-2-5',20,'失败')
insert test values('2013-2-6',30,'成功')
insert test values('2013-2-7',30,'成功')
(1)如何用sql语句生成下列结果?
ShuLiang 成功 失败
——————————
10 11
20 02
30 20
40 10
(2)用sql语句,查询表中所有数据,在查询结果中,把第X天的数量设置为第X-1天与第X-2天的数量之和(若x-1或x-2在表中不存在,x-1或x-2的数量为0)
结果如下:
RIQI ShuLiang
——————————
2013-02-01 0
2013-02-02 10
2013-02-03 30
2013-02-04 30
2013-02-05 50
2013-02-06 60
2013-02-07 50
[解决办法]
第一个用count(case when...)就行
[解决办法]
select ShuLiang
,count(case when JieGuo='成功' then 1 end) [成功]
,count(case when JieGuo='失败' then 1 end) [失败]
from test with(nolock)
group by ShuLiang
--结果
ShuLiang 成功 失败
----------- ----------- -----------
10 1 1
20 0 2
30 2 0
40 1 0
[解决办法]
第1、
select ShuLiang,
成功=SUM(case when JieGuo='成功' then 1 else 0 end),
失败=SUM(case when JieGuo='失败' then 1 else 0 end)
from test
group by ShuLiang
第2没看明白
[解决办法]
create table test(RiQi datetime,ShuLiang int,JieGuo nvarchar(50))
insert test values('2013-2-1',10,'成功')
insert test values('2013-2-2',20,'失败')
insert test values('2013-2-3',10,'失败')
insert test values('2013-2-4',40,'成功')
insert test values('2013-2-5',20,'失败')
insert test values('2013-2-6',30,'成功')
insert test values('2013-2-7',30,'成功')
select
ShuLiang,
成功=sum(case when JieGuo='成功' then 1 else 0 end),
失败=sum(case when JieGuo='失败' then 1 else 0 end)
from
test
group by
ShuLiang
/*
ShuLiang成功失败
-------------------------------
1011
2002
3020
4010
*/
select
RiQi,
ShuLiang=isnull((select sum(ShuLiang) from test b where b.RiQi
between dateadd(dd,-2,a.RiQi) and dateadd(dd,-1,a.riqi)),0)
from
test a
/*
RiQiShuLiang
-------------------------------------
2013-02-01 00:00:00.0000
2013-02-02 00:00:00.00010
2013-02-03 00:00:00.00030
2013-02-04 00:00:00.00030
2013-02-05 00:00:00.00050
2013-02-06 00:00:00.00060
2013-02-07 00:00:00.00050
*/
[解决办法]
DECLARE @test TABLE(RiQi datetime,ShuLiang int,JieGuo nvarchar(50))
insert @test values('2013-2-1',10,'成功')
insert @test values('2013-2-2',20,'失败')
insert @test values('2013-2-3',10,'失败')
insert @test values('2013-2-4',40,'成功')
insert @test values('2013-2-5',20,'失败')
insert @test values('2013-2-6',30,'成功')
insert @test values('2013-2-7',30,'成功')
SELECT ShuLiang,
SUM(CASE WHEN JieGuo = '成功' THEN 1 ELSE 0 END),
SUM(CASE WHEN JieGuo = '失败' THEN 1 ELSE 0 END)
FROM @test GROUP BY ShuLiang
[解决办法]
select riqi,ShuLiang+(select top 1 shuliang from test where riqi<a.riqi order by riqi desc) from test a
[解决办法]
SELECT ShuLiang,
SUM(CASE JieGuo WHEN '成功' THEN 1 ELSE 0 END),
SUM(CASE JieGuo WHEN '失败' THEN 1 ELSE 0 END)
FROM test GROUP BY ShuLiang
select riqi,
ShuLiang+(select top 1 shuliang
from test where riqi<a.riqi order by riqi desc) ShuLiang
from test a
