sql 语句求助

icemanpro 2011-04-15 11:03:22
现有一表内容如下

create table #a(kh varchar(5),yi varchar(6),er varchar(4),sa varchar(4),si varchar(4),kc int)
insert into #a
select 'D0211','000002','0001', '0000', '0002', 1
union
select 'D0211', '000002', '0001', '0000', '0002', 7
union
select 'D0211', '000002', '0001', '0000', '0002',12
union
select 'D0211', '000002', '0001', '0000', '0002', 19
union
select 'D0211', '000002', '0001', '0000', '0002', 26
union
select 'D0211', '000002', '0001', '0000', '0002', 27
union
select 'D0211', '000002', '0001', '0000', '0003', 28
union
select 'D0211', '000002', '0001', '0000', '0003', 29
union
select 'D0211', '000002', '0001', '0000', '0003', 30
union
select 'D0211', '000002', '0001', '0000', '0003', 34
union
select 'D0211', '000002', '0001', '0000', '0003', 40
union
select 'D0211', '000002', '0001', '0000', '0003', 45
union
select 'D0211', '000002', '0001', '0000', '0003', 52
union
select 'D0211', '000002', '0001', '0000', '0002', 53
union
select 'D0211', '000002', '0001', '0000', '0002', 59


现想从该表中生成如下数据,应该如何写sql语句??

ykkh yi er sa si min max
d0211 000002 0001 0000 0002 1 27
d0211 000002 0001 0000 0003 28 52
d0211 000002 0001 0000 0002 53 59

...全文
77 点赞 收藏 10
写回复
10 条回复
javatemptation 2011年04月15日

select kh as ykkh,yi,er,sa,si,MIN(kc) as [min],MAX(kc) as [max]
from
(
select *,1 as [sortnum]
from #a
where kc between 1 and 27
union
select *,2 as [sortnum]
from #a
where kc between 28 and 52
union
select *,3 as [sortnum]
from #a
where kc between 53 and 59
) as t
group by kh,yi,er,sa,si,[sortnum];
回复 点赞
icemanpro 2011年04月15日
查询结果要有三条记录才正确。
回复 点赞
lsykaka0911 2011年04月15日
用分组查询 试下 1-27、28-52、53-59为三组
回复 点赞
icemanpro 2011年04月15日
kc字段是从小到大,kc>=1 and kc<=27时,si =‘0002',当kc>=28 and kc<=52时,si='00003',当kc>=53 and kc<=59时,si='0002'
回复 点赞
快溜 2011年04月15日
create table #a(kh varchar(5),yi varchar(6),er varchar(4),sa varchar(4),si varchar(4),kc int)
insert into #a
select 'D0211','000002','0001', '0000', '0002', 1
union
select 'D0211', '000002', '0001', '0000', '0002', 7
union
select 'D0211', '000002', '0001', '0000', '0002',12
union
select 'D0211', '000002', '0001', '0000', '0002', 19
union
select 'D0211', '000002', '0001', '0000', '0002', 26
union
select 'D0211', '000002', '0001', '0000', '0002', 27
union
select 'D0211', '000002', '0001', '0000', '0003', 28
union
select 'D0211', '000002', '0001', '0000', '0003', 29
union
select 'D0211', '000002', '0001', '0000', '0003', 30
union
select 'D0211', '000002', '0001', '0000', '0003', 34
union
select 'D0211', '000002', '0001', '0000', '0003', 40
union
select 'D0211', '000002', '0001', '0000', '0003', 45
union
select 'D0211', '000002', '0001', '0000', '0003', 52
union
select 'D0211', '000002', '0001', '0000', '0002', 53
union
select 'D0211', '000002', '0001', '0000', '0002', 59

select kh ,yi ,er, sa, si,MIN(kc)[min],MAX(kc)[max] from #a group by kh ,yi ,er, sa, si

/*
kh yi er sa si min max
----- ------ ---- ---- ---- ----------- -----------
D0211 000002 0001 0000 0002 1 59
D0211 000002 0001 0000 0003 28 52
回复 点赞
javatemptation 2011年04月15日
把lz提供的数据小改了一下,出了结果


use tempdb;
/*
create table #a(kh varchar(5),yi varchar(6),er varchar(4),sa varchar(4),si varchar(4),kc int)
insert into #a
select 'D0211','000002','0001', '0000', '0002', 1
union
select 'D0211', '000002', '0001', '0000', '0002', 7
union
select 'D0211', '000002', '0001', '0000', '0002',12
union
select 'D0211', '000002', '0001', '0000', '0002', 19
union
select 'D0211', '000002', '0001', '0000', '0002', 26
union
select 'D0211', '000002', '0001', '0000', '0002', 27
union
select 'D0211', '000002', '0001', '0000', '0003', 28
union
select 'D0211', '000002', '0001', '0000', '0003', 29
union
select 'D0211', '000002', '0001', '0000', '0003', 30
union
select 'D0211', '000002', '0001', '0000', '0003', 34
union
select 'D0211', '000002', '0001', '0000', '0003', 40
union
select 'D0211', '000002', '0001', '0000', '0003', 45
union
select 'D0211', '000002', '0001', '0000', '0003', 52
union
select 'D0213', '000002', '0001', '0000', '0002', 53
union
select 'D0213', '000002', '0001', '0000', '0002', 59
*/
select kh as ykkh,yi,er,sa,si,MIN(kc) as [min],MAX(kc) as [max]
from #a
group by kh,yi,er,sa,si;
回复 点赞
dawugui 2011年04月15日
create table #a(kh varchar(5),yi varchar(6),er varchar(4),sa varchar(4),si varchar(4),kc int)
insert into #a
select 'D0211','000002','0001', '0000', '0002', 1
union
select 'D0211', '000002', '0001', '0000', '0002', 7
union
select 'D0211', '000002', '0001', '0000', '0002',12
union
select 'D0211', '000002', '0001', '0000', '0002', 19
union
select 'D0211', '000002', '0001', '0000', '0002', 26
union
select 'D0211', '000002', '0001', '0000', '0002', 27
union
select 'D0211', '000002', '0001', '0000', '0003', 28
union
select 'D0211', '000002', '0001', '0000', '0003', 29
union
select 'D0211', '000002', '0001', '0000', '0003', 30
union
select 'D0211', '000002', '0001', '0000', '0003', 34
union
select 'D0211', '000002', '0001', '0000', '0003', 40
union
select 'D0211', '000002', '0001', '0000', '0003', 45
union
select 'D0211', '000002', '0001', '0000', '0003', 52
union
select 'D0211', '000002', '0001', '0000', '0002', 53
union
select 'D0211', '000002', '0001', '0000', '0002', 59



select kh ykkh, yi, er, sa, si, min(kc) [min], max(kc) [max]
from #a
group by kh , yi, er, sa, si

/*
ykkh yi er sa si min max
----- ------ ---- ---- ---- ----------- -----------
D0211 000002 0001 0000 0002 1 59
D0211 000002 0001 0000 0003 28 52

(所影响的行数为 2 行)

*/

drop table #a
回复 点赞
lanmengxjh 2011年04月15日
什么规律啊?没看懂
回复 点赞
javatemptation 2011年04月15日
根据什么取出来的?
lz说明一下依据
回复 点赞
icemanpro 2011年04月15日
有没有人会???
回复 点赞
发动态
发帖子
应用实例
创建于2007-09-28

1.1w+

社区成员

6.8w+

社区内容

MS-SQL Server 应用实例
社区公告
暂无公告