更改SQL Server中所选行的顺序

时间:2015-04-21 11:17:13

标签: sql sql-server

表格中有4列。现在它的格式如下

Action   Value_XML            Control_ID        Data_Value
-----------------------------------------------------------
SEARCH  <ACTION v="SEARCH"/>     SEARCH          SEARCH
SEARCH  <BROKERREF v="BZ815"/>   BROKERREF       BZ815
SEARCH  <SYSTEM v="  0"/>        SYSTEM            0
Chg     <ACTION v="Chg"/>         Chg             Chg
Chg     <BROKERREF v="BZ815"/>   BROKERREF       BZ815
Chg     <SYSTEM v="  0"/>        SYSTEM            0

我需要以下格式记录

Action   Value_XML            Control_ID        Data_Value
-----------------------------------------------------------         
SEARCH  <SYSTEM v="  0"/>        SYSTEM            0
SEARCH  <BROKERREF v="BZ815"/>   BROKERREF       BZ815  
SEARCH  <ACTION v="SEARCH"/>     SEARCH          SEARCH
Chg     <SYSTEM v="  0"/>        SYSTEM            0
Chg     <BROKERREF v="BZ815"/>   BROKERREF       BZ815
Chg     <ACTION v="Chg"/>         Chg             Chg

注意:我需要具有相同control_id的行,而datavalue应该是特定操作列的最后一行

提前致谢

4 个答案:

答案 0 :(得分:1)

SELECT t.*
FROM t
ORDER BY Action, CASE WHEN Control_ID = Data_Value THEN 1 ELSE 0 END
;

答案 1 :(得分:0)

您似乎想要返回ActionControl_Id排序的结果集:

select t.*
from table t
order by Action,
         choose(Control_Id, 'SYSTEM', 'BROKERREF', 'SEARCH', 'Chg');

答案 2 :(得分:0)

按顺序获取所需的列并给出desc条件将产生样本数据的结果输出

DECLARE @T TABLE (Action varchar(30),value_xml varchar(30),ControlId varchar(20),Data_value varchar(20))
insert into @T (Action,value_xml,ControlId,Data_value)values ('SEARCH','<ACTION v="SEARCH"/>','SEARCH','SEARCH'),
('SEARCH','<BROKERREF v="BZ815"/>','BROKERREF','BZ815'),('SEARCH','<SYSTEM v="  0"/>','SYSTEM','0'),
('Chg','<ACTION v="Chg"/>','Chg','Chg'),('Chg','<BROKERREF v="BZ815"/>','BROKERREF','BZ815'),
('Chg','<SYSTEM v="  0"/> ','SYSTEM','0')

select * from @T
ORDER BY Action desc,value_xml desc,ControlId desc,Data_value

答案 3 :(得分:0)

将此添加到查询的末尾:

ORDER BY
Action, 
CASE WHEN Control_ID = DataValue THEN 1 ELSE 0 END