首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL查询的有关问题,大神请进.

2013-02-25 
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

热点排行
Bad Request.