Сортировка столбцов в SQL Server 2008 - PullRequest
0 голосов
/ 08 января 2020

У меня есть таблица с столбцами

ID, F1, F2, F3, F4, F5, F6, TB1, TB2, TB3, TB4, TB5, TB6

Мне нужно отсортировать значения в F1 через F6 и поместить их в TB1 через TB6 в порядке убывания. IE самое высокое значение в F1 через F6 будет go в TB1, а самое низкое значение в F1 через F6 попадет в TB6.

Я очень плохо знаком с SQL, поэтому чем больше деталей, тем лучше.

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

1 Ответ

0 голосов
/ 08 января 2020

Я не совсем уверен, будет ли это работать в ms sql 2008.

Но перекрестное применение к значениям с помощью сводки работает в ms sql 2012.

-- Sample data
create table test
(
  ID int identity(1,1) primary key,
  F1 int,
  F2 int,
  F3 int,
  F4 int,
  F5 int,
  F6 int,
  TB1 int,
  TB2 int,
  TB3 int,
  TB4 int,
  TB5 int,
  TB6 int
);

insert into test 
(F1, F2, F3, F4, F5, F6) values
(10,6,4,8,2,12),
(9,5,1,3,null,7);
GO
2 rows affected
WITH CTE AS
(
select *
from test t
cross apply 
(
  select *
  from
  (
    select Fn
    , row_number() over (order by Fn desc) rn
    from (values (F1),(F2),(F3),(F4),(F5),(F6)) v(Fn)
  ) s
  pivot 
  (
    max(Fn) 
    for rn in ([1],[2],[3],[4],[5],[6])
  ) p
) a
)
-- select * from CTE
update CTE
set TB1 = [1],
    TB2 = [2],
    TB3 = [3],
    TB4 = [4],
    TB5 = [5],
    TB6 = [6]
;
GO
2 rows affected
select *
from test
GO
ID | F1 | F2 | F3 | F4 |   F5 | F6 | TB1 | TB2 | TB3 | TB4 | TB5 |  TB6
-: | -: | -: | -: | -: | ---: | -: | --: | --: | --: | --: | --: | ---:
 1 | 10 |  6 |  4 |  8 |    2 | 12 |  12 |  10 |   8 |   6 |   4 |    2
 2 |  9 |  5 |  1 |  3 | <em>null</em> |  7 |   9 |   7 |   5 |   3 |   1 | <em>null</em>

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...