Изменение положения данных в столбцах в зависимости от фактических данных - PullRequest
0 голосов
/ 28 декабря 2010

Предположим, у меня есть таблица, как показано ниже

ID  Marks1  Marks2  Marks3
-------------------------
1   10      0       4
2   0      40       90

Теперь мне нужно выбрать из этой таблицы способ, который будет отдавать приоритет положительным значениям в первую очередь. Так что, если отметки равны 0, то он будет смещен вправо. SELECT должен дать следующий вывод

ID  Marks1  Marks2  Marks3
-------------------------
1   10      4       0
2   40      90      0

Можете ли вы привести меня к подходу? Будет здорово, если это можно сделать в самом операторе select. Заранее спасибо.

1 Ответ

1 голос
/ 28 декабря 2010

Примерно так: вам нужно будет проверить для каждой последующей строки, что предыдущий столбец не равен 0. Выберите значения как нулевые, поскольку это немного облегчает чтение кода, так как я могу использовать coalesce

Select
Coalesce(Marks1, Marks2, Marks3,0) as Marks1,
Case when marks1 is not null 
     then Coalesce(Marks2, Marks3, 0) else 0 
end as Marks2,
case when marks1 is not null 
     and marks2 is not null 
     then Coalesce(Marks3,0) 
end as Marks3

from
(
Select
Case when Marks1 =0 then null else Marks1 end as Marks1,
Case when Marks2 =0 then null else Marks2 end as Marks2,
Case when Marks3 =0 then null else Marks3 end as Marks3
  From mytbl
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...