基础Sql 语句问题,大侠帮忙
怎样写语句解决下面两个问题?
问题1:
有表 T1(IDs,NameID,KeyID1,KeyID2,KeyID3,KeyID4):
Ids NameID KeyID1 KeyID2 KeyID3 KeyID4
1 A 101 102 104 201 204 302 401
2 B 101 103 201 301 303
3 C 104 105 203 303 402
要怎样写Sql语句才能达到这种效果?(即:统计每个选项的数量)
Key Num
101 2
102 1
103 1
104 2
105 1
201 1
202 2
203 1
204 1
301 1
302 1
303 2
401 1
402 1
——————————————————————————————————
问题2:
表 T2(IDs,NumList):
IDs NumList
1 100
2 101
3 200
4 150
5 120
6 102
能不能统计出T2中NumList字段不连续的数字区间?
得如下结果:
不连续区间 差数
102-120 18
120-150 30
150-200 50
[解决办法]
KeyID1
101 102 104
最多个数确定吗?,是不是都是三位?
[解决办法]
问题2 :
select a.IDs || ' - ' || b.IDs as "不连续区间 ",a.Numberlist - b.Numberlist as "差额 "
from T2 a left join T2 b on a.IDs> b.IDs
where b.IDs = (select max(IDs) from student where IDs <a.IDs) and (a.Numberlist - b.Numberlist <> 1)
[解决办法]
问题2:
create table T2(IDs int, NumList int)
go
insert t2 select 1, 100
union all select 2, 101
union all select 3, 200
union all select 4, 150
union all select 5, 120
union all select 6, 102
go
select area = ltrim(SecNum)+ ' '+ltrim(NumList),sub=NumList-SecNum
from (select NumList, SecNum=(select max(NumList) from T2 as tb1 where tb1.NumList <tb.NumList) from T2 as tb) as T
where NumList-SecNum> 1
order by area
drop table T2