powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как перевернуть таблицу!
24 сообщений из 24, страница 1 из 1
Как перевернуть таблицу!
    #36422044
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Может быть конечно это глупый вопрос но помогите!
Есть временная таблица1 из одного столбца и 36 строк! Как сделать так что бы таблица1 стала выглядеть так: одна строки и 36 столбцов! Другими словами перевернуть!
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422050
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422051
Ramis,
создать еще одну временную таблицу, у которой 36 столбцов и 1 строка и перекинуть данные.
Это согласно вашей указанной задаче.
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422090
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель Использование операторов PIVOT и UNPIVOT

А как использовать PIVOT если столбец один? Что то я не понял!
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422098
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зависит от задачи
простейший (надеюсь) пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
-- test data
declare @t table(dt smalldatetime)
insert into @t(dt)
select '20100110' union all
select '20100112' union all
select '20100214' union all
select '20100116' 
-- end of test data

select *
  from (select dt
              ,row_number() over(order by dt) as rn
          from @t
        ) as numbered
 pivot (min(dt) for rn in([ 1 ], [ 2 ], [ 3 ], [ 4 ])) as pvt
       
 1                         2                         3                         4 
----------------------- ----------------------- ----------------------- -----------------------
 2010 - 01 - 10   00 : 00 : 00       2010 - 01 - 12   00 : 00 : 00       2010 - 01 - 16   00 : 00 : 00       2010 - 02 - 14   00 : 00 : 00 

( 1  row(s) affected)
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422143
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганельзависит от задачи
простейший (надеюсь) пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
-- test data
declare @t table(dt smalldatetime)
insert into @t(dt)
select '20100110' union all
select '20100112' union all
select '20100214' union all
select '20100116' 
-- end of test data

select *
  from (select dt
              ,row_number() over(order by dt) as rn
          from @t
        ) as numbered
 pivot (min(dt) for rn in([ 1 ], [ 2 ], [ 3 ], [ 4 ])) as pvt
       
 1                         2                         3                         4 
----------------------- ----------------------- ----------------------- -----------------------
 2010 - 01 - 10   00 : 00 : 00       2010 - 01 - 12   00 : 00 : 00       2010 - 01 - 16   00 : 00 : 00       2010 - 02 - 14   00 : 00 : 00 

( 1  row(s) affected)


Конечно ни чего не понял! Но большое спасибо! буду разбираться дальше!!!
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422429
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не поддерживается PIVOT! Есть ли какие нибудь другие варианты?
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422433
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RamisУ меня не поддерживается PIVOT! Есть ли какие нибудь другие варианты?Чем же не поддерживается?
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422442
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичЧем же не поддерживается?

Версию пусть покажет... :-)
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422446
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
-- test data
declare @t table(dt smalldatetime unique not null)
insert into @t(dt)
select '20100110' union all
select '20100112' union all
select '20100214' union all
select '20100116' 
-- end of test data
set ansi_warnings off

select min(case when rn =  1  then dt else null end) as [ 1 ]
      ,min(case when rn =  2  then dt else null end) as [ 2 ]
      ,min(case when rn =  3  then dt else null end) as [ 3 ]
      ,min(case when rn =  4  then dt else null end) as [ 4 ]
  from (select t1.dt
              ,(select count(*) from @t as t2 where t2.dt <= t1.dt) as rn
          from @t as t1
        ) as numbered
        
set ansi_warnings on

 1                         2                         3                         4 
----------------------- ----------------------- ----------------------- -----------------------
 2010 - 01 - 10   00 : 00 : 00       2010 - 01 - 12   00 : 00 : 00       2010 - 01 - 16   00 : 00 : 00       2010 - 02 - 14   00 : 00 : 00 

( 1  row(s) affected)
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422461
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичRamisУ меня не поддерживается PIVOT! Есть ли какие нибудь другие варианты?Чем же не поддерживается?

Ну не то что не поддерживается)))
Пишет:
Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.

Я делаю:
EXEC sp_dbcmptlevel #tmp, 90;
GO
Но всё равно не срабатывает!


DECLARE @FormObuch int, @SPEC int, @KURS int, @KolNaKurse int, @KolAkadem int, @AllKolNaKurse int, @AllKolAkadem int, @TypeObuch int,@TypeObuch2 int,@TO varchar(50)
CREATE TABLE #tmp(tmp1 int) DELETE FROM #tmp

SET @FormObuch=6
SET @TO='Сводная'
IF (@TO = 'Сводная') SET @TypeObuch=4 SET @TypeObuch2=11
IF (@TO = 'Договор') SET @TypeObuch=4 SET @TypeObuch2=4
IF (@TO = 'Бюджет') SET @TypeObuch=11 SET @TypeObuch2=11
SET @SPEC=1 SET @KURS=1 SET @AllKolNaKurse=0 SET @AllKolAkadem=0
WHILE @SPEC <= 6
BEGIN
WHILE @KURS <= 6
BEGIN
SELECT @KolNaKurse=count(*)FROM CRM WHERE Key_pSTATUSES_Fact=@KURS and Key_pSPECIALITY=@SPEC and Key_pFormObuch_Dim=@FormObuch and (Key_pSTATUSES=10 or Key_pSTATUSES=@KURS)
and (Key_pTypeObuch_Dim=@TypeObuch or Key_pTypeObuch_Dim=@TypeObuch2)
SELECT @KolAkadem=count(*)FROM CRM WHERE Key_pSTATUSES_Fact=@KURS and Key_pSPECIALITY=@SPEC and Key_pFormObuch_Dim=@FormObuch and Key_pSTATUSES=10
and (Key_pTypeObuch_Dim=@TypeObuch or Key_pTypeObuch_Dim=@TypeObuch2)
INSERT INTO #tmp(tmp1) VALUES (@KolNaKurse)
INSERT INTO #tmp(tmp1) VALUES (@KolAkadem)
SET @KURS = @KURS+1
SET @KolNaKurse = 0 SET @KolAkadem = 0
END
SET @SPEC = @SPEC+1
SET @KURS = 1
END

EXEC sp_dbcmptlevel #tmp, 90;
GO

SELECT * FROM (SELECT * FROM #tmp) q
PIVOT (tmp1) pvt

DROP TABLE #tmp
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422469
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу не то что не поддерживается)))
Пишет:
Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.

Я делаю:
EXEC sp_dbcmptlevel #tmp, 90;
GO
Но всё равно не срабатывает!А ничего, что для sp_dbcmptlevel нужно базу указывать?
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422471
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RamisSELECT * FROM (SELECT * FROM #tmp) q
PIVOT (tmp1) pvtСтатью Вы не читали
Пример мой не смотрели
Даже не знаю, чем Вам помочь
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422478
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramis,

а Вас не смущает в имени процедуры sp_dbcmptlevel буковки db ?
Почему Вы применяете её к таблице???

Лучше напишите здесь результат
Код: plaintext
PRINT @@VERSION
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422489
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаганельRamisSELECT * FROM (SELECT * FROM #tmp) q
PIVOT (tmp1) pvtСтатью Вы не читали
Пример мой не смотрели
Даже не знаю, чем Вам помочь

Статью я прочитал - не понял)) Я старался делать всё по вашему примеру!!!
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422502
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё PIVOT я подключил!!! Но как с ним работать я так и не понял!!
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422801
Ramis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё с PIVOT я разобрался! а как теперь сделать что бы он заполнял в той же последовательности?
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #36422823
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RamisВсё с PIVOT я разобрался! а как теперь сделать что бы он заполнял в той же последовательности?
Еще раз разобраться с PIVOT???
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как перевернуть таблицу!
    #39702875
Если
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.

Такой же примерно вопрос, но таблица немного другая.
Нужно сделать без pivot т.к. потом нужно будет сделать чтобы и в my sql работало тоже.

Скрины во вложении.
Примечание:
Таких code много тысяч.
У каждого из них от 1 до 20 delivery.
Причем для каждого code количество delivery=количеству cnt

Помогите пж-та.

Заранее спасибо.
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #39702898
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕслиТакой же примерно вопрос, но таблица немного другая.
Нужно сделать без pivot т.к. потом нужно будет сделать чтобы и в my sql работало тоже.Ваша задача совсем другая, PIVOT-ом её не сделать. Варианты решений тоже есть в ФАКе (ищите агрегирование строк).
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #39702927
Если
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пивотом мне не нужно.

Запрос на основе вышестоящего, я написал. Но только для агрегирования delivery

Код: sql
1.
2.
3.
4.
5.
6.
select Code,min(case when rn = 1 then delivery else null end)+';'+min(case when rn = 2 then delivery else null end)
		+';'+min(case when rn = 3 then delivery else null end)+';'+min(case when rn = 4 then delivery else null end) as delivery
  from (select t1.delivery,Code
              ,(select count(delivery) from table_1 as t2 where t2.delivery <= t1.delivery ) as rn
          from table_1 as t1
        )t group by Code 




Но он неправильно работает, т.к. или здесь надо менять
Код: sql
1.
when rn = 1 then delivery 

или где-то в подзапросе нужна группировка по полю Code.
И + нужно еще добавить агрегирование CNT.

В факе подобной задачи не нашел.

Заранее спасибо.
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #39702938
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еслипотом нужно будет сделать чтобы и в my sql работало тоже.Не выйдет.

Если версия MSSQL позволяет, см. string_agg
Если нет, то
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 a.code,
 stuff(b.x.query('delivery/text()').value('.', 'varchar(max)'), 1, 1, ''),
 stuff(b.x.query('cnt/text()').value('.', 'varchar(max)'), 1, 1, '')
from
 (select distinct code from MyTable) a cross apply
 (select ';' + delivery as delivery, ';' + cast(cnt as varchar(10)) as cnt from MyTable where code = a.code for xml path(''), type) b(x);
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #39702949
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm..Если версия MSSQL позволяет, см. string_agg..SQL_2017/AW14:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select[CountryRegionCode]
,string_agg([StateProvinceCode],',')within group(order by[StateProvinceCode])x
,string_agg(gk,',')within group(order by[StateProvinceCode])y
from(
	select[StateProvinceCode],[CountryRegionCode],max([GeographyKey])gk
	from[AdventureWorksDW2017].[dbo].[DimGeography]
	group by[StateProvinceCode],[CountryRegionCode]
	)y
group by[CountryRegionCode]

или в твоём случае:
Код: sql
1.
2.
select[code],string_agg([delivery])del,string_agg([cnt])cn
from[my_table]group by[code]
...
Рейтинг: 0 / 0
Как перевернуть таблицу!
    #39702959
Если
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, работает!
Спасибо всем кто откликнулся.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как перевернуть таблицу!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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