读书人

这样的数据怎样排序求SQL语句解决方

发布时间: 2012-03-18 13:55:38 作者: rapoo

这样的数据怎样排序,求SQL语句
有表数据:
ID F1 Qty F3
1 A1 1 001
2 A1 1 001
3 A1 2 002
4 A1 3 003
5 B1 1 004
6 B1 1 005
7 B1 1 005
8 B1 2 005
9 C1 1 006

要按:F1,Qty进行排序,然后再把具有相同的F3排在最后面,要得到以下结果:
ID F1 Qty F3
3 A1 2 002
4 A1 3 003
5 B1 1 004
9 C1 1 006
1 A1 1 001
2 A1 1 001
6 B1 1 005
7 B1 1 005
8 B1 2 005


[解决办法]

SQL code
select *from tb torder by (case when exists (select 1 from tb where f1=t.f1 and qty=t.qty and id<>t.id) then 1 else 0 end),f1,qty,f3
[解决办法]
实在没理解你的逻辑,能把你的应用说说吗?
[解决办法]
SQL code
declare @T table (ID int,F1 varchar(2),Qty int,F3 varchar(3))insert into @Tselect 1,'A1',1,'001' union allselect 2,'A1',1,'001' union allselect 3,'A1',2,'002' union allselect 4,'A1',3,'003' union allselect 5,'B1',1,'004' union allselect 6,'B1',1,'005' union allselect 7,'B1',1,'005' union allselect 8,'B1',2,'005' union allselect 9,'C1',1,'006'select * from @T t order by (select count(1) from @T where F3=t.F3)/*ID          F1   Qty         F3----------- ---- ----------- ----3           A1   2           0024           A1   3           0035           B1   1           0049           C1   1           0061           A1   1           0012           A1   1           0016           B1   1           0057           B1   1           0058           B1   2           005*/
[解决办法]
SQL code
DECLARE  @T TABLE(ID VARCHAR(20),F1 VARCHAR(20),  Qty VARCHAR(20),F3 VARCHAR(20))INSERT INTO @TSELECT '1','A1','1','001' UNION ALLSELECT '2','A1','1','001' UNION ALLSELECT '3','A1','2','002' UNION ALLSELECT '4','A1','3','003' UNION ALLSELECT '5','B1','1','004' UNION ALLSELECT '6','B1','1','005' UNION ALLSELECT '7','B1','1','005' UNION ALLSELECT '8','B1','2','005' UNION ALLSELECT '9','C1','1','006'SELECT *FROM (SELECT (SELECT COUNT(1) FROM @T WHERE F3=T1.F3 GROUP BY F3) AS ORD, * FROM @T T1) AORDER BY ORD,F1,QTY
[解决办法]
SQL code
create table tb (ID int,F1 varchar(2),Qty int,F3 varchar(3))insert into tbselect 1,'A1',1,'001' union allselect 2,'A1',1,'001' union allselect 3,'A1',2,'002' union allselect 4,'A1',3,'003' union allselect 5,'B1',1,'004' union allselect 6,'B1',1,'005' union allselect 7,'B1',1,'005' union allselect 8,'B1',2,'005' union allselect 9,'C1',1,'006'select m.* from tb m , (select f3 , count(1) cnt from tb group by f3) nwhere m.f3 = n.f3order by n.cnt , m.f1 , m.qtydrop table tb/*ID          F1   Qty         F3   ----------- ---- ----------- ---- 3           A1   2           0024           A1   3           0035           B1   1           0049           C1   1           0061           A1   1           0012           A1   1           0016           B1   1           0057           B1   1           0058           B1   2           005(所影响的行数为 9 行)*/ 

读书人网 >SQL Server

热点推荐