SQL сгруппировать три столбца в один - PullRequest
0 голосов
/ 05 мая 2020

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

[ID]  [name]         [link]
1     sample_name_1  sample_link_1
2     sample_name_2  sample_link_2
3     sample_name_3  sample_link_3

Мне нужно как-то сгруппировать их в один столбец, поэтому идеальный результат таков:

[one_column]
1
sample_name_1
sample_name_1
2
sample_name_2
sample_link_2
3
sample_name_3
sample_link_3

Есть ли у кого-нибудь предложения о том, где искать и как это сделать на SQL сервере?

Ответы [ 2 ]

6 голосов
/ 05 мая 2020

Вы можете попробовать использовать конструктор значений таблицы VALUES с CROSS APPLY:

Таблица:

CREATE TABLE MyTable (
   ID int,
   name varchar(50),
   link varchar(50)
)
INSERT INTO MyTable (ID, name, link)
VALUES
   (1, 'sample_name_1', 'sample_link_1'),
   (2, 'sample_name_2', 'sample_link_2'),
   (3, 'sample_name_3', 'sample_link_3')

Оператор:

SELECT v.one_column
FROM MyTable t
CROSS APPLY (VALUES 
  (1, CONVERT(varchar(50), ID)), 
  (2, CONVERT(varchar(50), name)), 
  (3, CONVERT(varchar(50), link))
) v (rn, one_column)
ORDER BY t.ID, v.rn

Результат:

one_column
1
sample_name_1
sample_link_1
2
sample_name_2
sample_link_2
3
sample_name_3
sample_link_3
2 голосов
/ 05 мая 2020

Хотя это то, что вы должны делать на уровне представления (например, в вашем приложении или веб-сайте), вы можете сделать это в SQL:

select one column
from
(
  select cast(id as varchar(10)) as one column, id as sortkey1, 1 as sortkey2 from mytable
  union all
  select name as one column, id as sortkey1, 2 as sortkey2 from mytable
  union all
  select link as one column, id as sortkey1, 3 as sortkey2 from mytable
) unioned
order by sortkey1, sortkey2;
...