2015-04-21 2 views
-1

У меня есть 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 

Примечание: мне нужно обновить строки следующим образом:

Row 1 и строка 3 должен быть заменен (когда Control_id и DataValue одинаковы, он должен быть последним) Строка 4 и строка 6 должны быть заменены (когда Control_id и DataValue одинаковы, это должна быть последняя строка)

Примечание: Здесь количество строк динамическое, не обязательно, что у нас есть только 3 строки.

Заранее спасибо

+3

Вы хотите изменить когда вы делаете SELECT? Используйте ORDER BY, вероятно, в сочетании с CASE – jarlh

+4

sql-таблицы не сортируются в любой реляционной базе данных, о которой я знаю. порядок строк в таблице абсолютно бессмыслен. –

ответ

3

Вы не включают запрос или деталь таблицы, или даже то, что база данных, которую вы используете, так что трудно говорить с уверенностью.

В целом, однако, базы данных sql возвращают записи в произвольном порядке. Если вы хотите, чтобы ваши результаты были в определенном порядке, вы должны включить соответствующее предложение ORDER BY, которое в этом случае будет отображаться в последнем столбце.

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 ...)

Смежные вопросы