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

求排序的SQL解决思路

2012-03-27 
求排序的SQLSQL code--我有一张表tax,数据约有2000万条,有以下字段--ID int 递增,主键--纳税人内部码 varc

求排序的SQL

SQL code
--我有一张表tax,数据约有2000万条,有以下字段--ID int 递增,主键--纳税人内部码 varchar(50), 指的是纳税的单位对应的纳税ID --纳税个人内部码 varchar(50),指的是纳税个人对应的纳税ID--代扣代缴单位 varchar(200), 指的是纳税的单位名称--通讯地址 varchar(200),    指的是纳税的单位的通讯地址--地市名称 varchar(20),     指纳税单位或个人所在的城市--station varchar(8),        指的是通讯地址所属的站,8位数字组成,也有null值存在--sect varchar(3),          指的是通讯地址所属的段,1-3位数组成,也有null值存在,不足3位前面没有补位--countnumber int,           指的是数据中同一 纳税人内部码 且 同一通讯地址的记录条数--信息编码 varchar(50),     信息编码是按业务需求规则定制的,它由 station + '-' + 'sect + '-' + 纳税人内部码 + 流水号                             其中,流水号为 1至countnumber的最大值,流水号为固定6位,不足6位的前面补0--其中,countnumber、信息编码 2个字段是手工新增的,要求先填充数据,再排序数据--要求用SQL实现:--1、按countnumber字段要求统计出数值填充到countnumber字段中;--2、按信息编码字段要求填充到信息编码字段中;--3、排序数据,按station,sect,countnumber desc,纳税人内部码,代扣代缴单位  来排序


[解决办法]
--1、按countnumber字段要求统计出数值填充到countnumber字段中;
update tax set countnumber = (select count(1) from tax where 纳税人内部码 = t.纳税人内部码 and 通讯地址 = t.通讯地址) from tax t

--2、按信息编码字段要求填充到信息编码字段中;
update tax set 信息编码 = isnull(station,'') + '-' + isnull(sect,'') + '-' + 纳税人内部码 + right('00000'+cast(countnumber as varchar),6)

--3、排序数据,按station,sect,countnumber desc,纳税人内部码,代扣代缴单位 来排序
select * from tax order by station,sect,countnumber desc,纳税人内部码,代扣代缴单位

[解决办法]
--1、按countnumber字段要求统计出数值填充到countnumber字段中;
update tax set countnumber = (select count(1) from tax where 纳税人内部码 = t.纳税人内部码 and 通讯地址 = t.通讯地址) from tax t

--2、按信息编码字段要求填充到信息编码字段中;
update tax set 信息编码 = isnull(station,'') + '-' + isnull(sect,'') + '-' + 纳税人内部码 + '-' + right('00000'+cast(countnumber as varchar),6)

--3、排序数据,按station,sect,countnumber desc,纳税人内部码,代扣代缴单位 来排序
select * from tax order by station,sect,countnumber desc,纳税人内部码,代扣代缴单位

[解决办法]
SQL code
select * from #tb order by isnull([station],2147483647),isnull([sect],2147483647) 

热点排行