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

这两个查询怎么写

2012-09-13 
这两个查询如何写?----建立测试数据----环境:MSSQL2000ifexists (select * from sysobjects where id ob

这两个查询如何写?
----建立测试数据
----环境:MSSQL2000

if exists (select * from sysobjects where id = object_id(N'Table1') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
  drop table Table1
end

GO

CREATE TABLE [Table1] (
[fdSn] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO



Insert Table1 (fdSn) Values ( 'A001')
Insert Table1 (fdSn) Values ( 'A003')
Insert Table1 (fdSn) Values ( 'A002')
Insert Table1 (fdSn) Values ( 'A099')
Insert Table1 (fdSn) Values ( 'A100')
Insert Table1 (fdSn) Values ( 'A055')
Insert Table1 (fdSn) Values ( 'A059')
Insert Table1 (fdSn) Values ( 'A058')
Insert Table1 (fdSn) Values ( 'A012')


select * from Table1


/*
已知一个表Table1如下:
fdSn
A001
A003
A002
A099
A100
A055
A059
A058
A012


A为前缀,其余3位是流水号
写一个查询或存储过程,把有连接+1的用最小值和最大值标出范围,其它保持不变

即:

查询一:
fdSn
A001-A003
A099-A100
A055
A058-A059
A012


查询二:(把没有连续的单个数最大值用相同的数表示最大值)
fdSn
A001-A003
A099-A100
A055-A055
A058-A059
A012-A012




这个两个查询怎么写呀?

*/


[解决办法]
http://blog.csdn.net/wufeng4552/archive/2009/12/04/4938218.aspx

这个吗?
[解决办法]

SQL code
--1;WITH t AS(SELECT fdSn,fd=left(fdSn,1),sn=CAST(STUFF(fdSn,1,1,'')AS INT)from Table1)select fdSn=fdSn+(SELECT ISNULL('-'+MIN(fdSn),'') FROM t AS b        WHERE fd=a.fd AND sn>a.sn        AND NOT EXISTS (SELECT 1 FROM t WHERE  fd=b.fd AND sn=b.sn+1)        AND EXISTS (SELECT 1 FROM t WHERE  fd=b.fd AND sn=a.sn+1)            )        from t AS a WHERE  NOT EXISTS ( SELECT 1 FROM   t WHERE fd=a.fd AND sn=a.sn-1)/*fdSn-----------------------------------------------------------------A001-A003A099-A100A055A058-A059A012(5 行受影响)*/;WITH t AS(SELECT fdSn,fd=left(fdSn,1),sn=CAST(STUFF(fdSn,1,1,'')AS INT)from Table1)select fdSn=fdSn+'-'+ISNULL((SELECT MIN(fdSn) FROM t AS b        WHERE fd=a.fd AND sn>a.sn        AND NOT EXISTS (SELECT 1 FROM t WHERE  fd=b.fd AND sn=b.sn+1)        AND EXISTS (SELECT 1 FROM t WHERE  fd=b.fd AND sn=a.sn+1)            ),fdSn)        from t AS a WHERE  NOT EXISTS ( SELECT 1 FROM   t WHERE fd=a.fd AND sn=a.sn-1)/*fdSn-----------------------------------------------------------------A001-A003A099-A100A055-A055A058-A059A012-A012(5 行受影响)*/ 

热点排行