powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как написать "горизонтально-вертикальный" запрос?
9 сообщений из 9, страница 1 из 1
Как написать "горизонтально-вертикальный" запрос?
    #39566492
Aleksey br
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Можете подсказать как написать запрос к следующему интересному заданию:
Есть диамическая по полям таблица, которая раз в день пересобирается:
col1...col N-1col N1...112...21............2...33
мне нужно все значения полей этой таблицы собирать в одно:
colcol Nane1col12col1...col12col1......1col N-12col N-1...col N-13col N-11col N1col N...col N3col N
в принципе, [col Name] можно не передавать.
Спасибо
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566500
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566503
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey br,

Офигеть вы данные нарисовали - одни 1 и 2, и как разобраться в том, что из чего получилось?

1. Самое правильное - взять исходные данные ( "диамическая по полям таблица, которая раз в день пересобирается" ) и работать с ними.
2. Ну а если нет, изучайте CROSS / OUTER APPLY
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT
  col1, col2
FROM
  t
;
SELECT
  ss.[col],
  ss.[val]
FROM
  t
  CROSS APPLY (
    SELECT
      [col] = 'col1',
      [val] = t.[col1]
    UNION ALL
    SELECT
      [col] = 'col2',
      [val] = t.[col2]
  ) ss
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566522
iii2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие Cross Apply то, вы о чем???
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select ID, Col1  [col Name] 
From table1
Union all
Select ID, Col2  [col Name] 
From table1
Union all
Select ID, Col3  [col Name] 
From table1
...
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566533
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iii2,
для размышления...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
SELECT
  [name] = CONVERT( NVARCHAR(MAX), [name] ),
  [type] = CONVERT( NVARCHAR(MAX), [type] )
INTO
  #test
FROM
  [master]..[spt_values]
;  
SET STATISTICS IO, TIME ON
SELECT
  [col] = 'name',
  [val] = [name]
INTO
  #t1
FROM
  #test
UNION ALL
  SELECT
  [col] = 'type',
  [val] = [type]
FROM
  #test
;
SELECT
  ss.[col],
  ss.[val]
INTO
  #t2
FROM
  #test v
  CROSS APPLY (
    SELECT
      [col] = 'name',
      [val] = [name]
    UNION ALL
    SELECT
      [col] = 'type',
      [val] = [type]
  ) ss
;
SELECT
  *
INTO
  #t3
FROM
  #test v
  UNPIVOT (
    [val] FOR [col] IN 
      ( v.[name], v.[type] )
  ) ss
;
SET STATISTICS IO, TIME OFF
;
DROP TABLE #t1, #t2, #t3
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566538
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  [name] = CONVERT( NVARCHAR(MAX), v1.[name] ),
  [type] = CONVERT( NVARCHAR(MAX), v1.[type] )
INTO
  #test
FROM
  [master]..[spt_values] v1
  CROSS APPLY [master]..[spt_values] v2
;  


Если увеличить количество записей, PIVOT неожиданно вырывается в лидеры.
В общем, требуются комментарии специалистов.
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566544
Жытель Гондураса
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey brВсем привет.
Можете подсказать как написать запрос к следующему интересному заданию:
Есть диамическая по полям таблица , которая раз в день пересобирается:
col1...col N-1col N1...112...21............2...33
мне нужно все значения полей этой таблицы собирать в одно:
colcol Nane1col12col1...col12col1......1col N-12col N-1...col N-13col N-11col N1col N...col N3col N
в принципе, [col Name] можно не передавать.
Спасибо

Что это такое?

На момент выполнения запроса любая таблица - статическая.
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566562
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диамическая по полям таблица
Кул стори, удачи Вам с г-но архитектурой.
...
Рейтинг: 0 / 0
Как написать "горизонтально-вертикальный" запрос?
    #39566729
xml же !
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @t table (col1 int, col2 int, col3 int, col4 int, col5 int)

declare @i int=1

while @i<10
begin
	insert into @t select @i,@i,@i,@i,@i
	set @i=@i+1
end

--
declare @xml xml=(select * from @t for xml raw, elements)

select 
	col_name	=t.c.value('local-name(.)', 'varchar(20)')
	,col_value	=t.c.value('./text()[1]', 'int') 
from @xml.nodes('/row/*') as t(c)
order by 1


col_namecol_valuecol11col12col13col14col15col16col17col18col19col29col28col27col26col25col24col23col22col21col31col32col33col34col35col36col37col38col39col49col48col47col46col45col44col43col42col41col51col52col53col54col55col56col57col58col59
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как написать "горизонтально-вертикальный" запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]