Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как написать "горизонтально-вертикальный" запрос? / 9 сообщений из 9, страница 1 из 1
08.12.2017, 11:55:12
    #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
08.12.2017, 12:01:52
    #39566500
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать "горизонтально-вертикальный" запрос?
...
Рейтинг: 0 / 0
08.12.2017, 12:06:02
    #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
08.12.2017, 12:36:28
    #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
08.12.2017, 12:51:54
    #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
08.12.2017, 12:56:33
    #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
08.12.2017, 13:03:28
    #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
08.12.2017, 13:31:50
    #39566562
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать "горизонтально-вертикальный" запрос?
диамическая по полям таблица
Кул стори, удачи Вам с г-но архитектурой.
...
Рейтинг: 0 / 0
08.12.2017, 16:09:22
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как написать "горизонтально-вертикальный" запрос? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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