交换数据库行

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

标签: sql

我在表格中有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

注意:我需要按如下方式更新行:

应该交换第1行和第3行(当Control_id和DataValue相同时,它应该是最后一行) 应该交换第4行和第6行(当Control_id和DataValue相同时应该是最后一行)

注意:这里的行数是动态的,没有必要我们只有3行。

提前致谢

2 个答案:

答案 0 :(得分:3)

您不会包含查询或表格详细信息,甚至包括您正在使用的数据库,因此很难确定。

通常,sql数据库以任意顺序返回记录。如果您希望您的结果按某种特定顺序排列,则必须包含适当的ORDER BY子句,在这种情况下,该子句似乎位于最后一列。

答案 1 :(得分:1)

如前所述,两个数据集是相同的,只有行的顺序不同。话虽如此,我认为以下内容将提供您所寻找的内容:

SELECT Action, Value_XML, Control_ID, Data_Value
 from MyTable
 order by
   Action
  ,case
     when Control_ID = DataValue then 1  --  This assumes the datatypes can be compared
     else 0
   end
  ,Value_XML

(你可以在case条款中使用order by语句执行不太可能的事情......)