powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли "развернуть" таблицу на 90 гр?
35 сообщений из 35, показаны все 2 страниц
Можно ли "развернуть" таблицу на 90 гр?
    #32038598
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть таблица

Field1 Field2 .....FieldN Option
--------------------------------
1 1 .... 1 1
10 10 .... 10 2
100 100 .... 100 3


мне нужно "развернуть" ее на 90 гр и показать в таком виде


FieldName Option1 Option2 Option3
----------------------------------------
Field1 1 10 100
Field2 1 10 100
Field3 1 10 100
.....
FieldN 1 10 100

Данные, естественно, только лишь как пример.
Может кто сталкивался и уже решал подобные заморочки?
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038604
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038642
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делается тривиально. Посмотрите операторы PIVOT / UNPIVOT.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038647
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, поторопился. Хотя, с другой стороны, Вы же не указали версию :)
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038648
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL 2000
Не нашел в BOL этих операторов. А можно примерчик? Применительно к моеиу вопросу?
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038737
Konst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня был подобный вопрос. Посмотри.\r
/topic/9171\r
Предложенная процедура помогла выйти из положения.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038742
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL: Accessing and Changing Relational Data \ Advanced Query Concepts \ Transact-SQL Tips \ Cross-Tab Reports

Там есть пример.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32038897
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst, покажи пример использования это sp для вразения таблицы. Что то я никак сообразить не могу.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039321
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cross-Tab Reports
Sometimes it is necessary to rotate results so that columns are presented horizontally and rows are presented vertically. This is known as creating a PivotTable®, creating a cross-tab report, or rotating data.

Assume there is a table Pivot that has one row per quarter. A SELECT of Pivot reports the quarters vertically:

Year Quarter Amount
---- ------- ------
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4

A report must be produced with a table that contains one row for each year, with the values for each quarter appearing in a separate column, such as:

Year
Q1
Q2
Q3
Q4

1990
1.1
1.2
1.3
1.4

1991
2.1
2.2
2.3
2.4



These are the statements used to create the Pivot table and populate it with the data from the first table:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USE Northwind
GO

CREATE TABLE Pivot
( Year      SMALLINT,
  Quarter   TINYINT, 
  Amount      DECIMAL( 2 , 1 ) )
GO
INSERT INTO Pivot VALUES ( 1990 ,  1 ,  1 . 1 )
INSERT INTO Pivot VALUES ( 1990 ,  2 ,  1 . 2 )
INSERT INTO Pivot VALUES ( 1990 ,  3 ,  1 . 3 )
INSERT INTO Pivot VALUES ( 1990 ,  4 ,  1 . 4 )
INSERT INTO Pivot VALUES ( 1991 ,  1 ,  2 . 1 )
INSERT INTO Pivot VALUES ( 1991 ,  2 ,  2 . 2 )
INSERT INTO Pivot VALUES ( 1991 ,  3 ,  2 . 3 )
INSERT INTO Pivot VALUES ( 1991 ,  4 ,  2 . 4 )
GO


This is the SELECT statement used to create the rotated results:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Year, 
    SUM(CASE Quarter WHEN  1  THEN Amount ELSE  0  END) AS Q1,
    SUM(CASE Quarter WHEN  2  THEN Amount ELSE  0  END) AS Q2,
    SUM(CASE Quarter WHEN  3  THEN Amount ELSE  0  END) AS Q3,
    SUM(CASE Quarter WHEN  4  THEN Amount ELSE  0  END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

This SELECT statement also handles a table in which there are multiple rows for each quarter. The GROUP BY combines all rows in Pivot for a given year into a single row in the output. When the grouping operation is being performed, the CASE functions in the SUM aggregates are applied in such a way that the Amount values for each quarter are added into the proper column in the result set and 0 is added to the result set columns for the other quarters.

If the results of this SELECT statement are used as input to a spreadsheet, it is easy for the spreadsheet to calculate a total for each year. When the SELECT is used from an application it may be easier to enhance the SELECT statement to calculate the yearly total. For example:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal
FROM (SELECT Year,
             SUM(CASE P.Quarter WHEN  1  THEN P.Amount ELSE  0  END) AS Q1,
             SUM(CASE P.Quarter WHEN  2  THEN P.Amount ELSE  0  END) AS Q2,
             SUM(CASE P.Quarter WHEN  3  THEN P.Amount ELSE  0  END) AS Q3,
             SUM(CASE P.Quarter WHEN  4  THEN P.Amount ELSE  0  END) AS Q4
     FROM Pivot AS P
     GROUP BY P.Year) AS P1
GO

Both GROUP BY with CUBE and GROUP BY with ROLLUP compute the same sort of information as shown in the example, but in a slightly different format.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039521
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем. Еще раз:
Таблица

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Materail    EndConnection      Option
 --------------------------------------
 
A1           FE                     1 
A2           BE                     2    
A3           FEE                    3  


В результате нужно:

Field                 Option1        Option2         Option3
 ------------------------------------------------------------
 
'Material'              A1              A2                A3
'EndConnection'         FE              BE                FEE
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039524
SergCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот работающий код:
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
SET NOCOUNT ON
create table tmp(Materail varchar( 50 ), EndConnection varchar( 50 ), [Option] int)
insert tmp values('A1','FE', 1 )
insert tmp values('A2','BE', 2 )
insert tmp values('A3','FEE', 3 )

 -- создаем таблицу
 
declare @s varchar( 8000 )
set @s='create table #tmp (Field varchar(50),'

select @s=@s+'[Option'+cast([Option] as varchar( 20 ))+'] varchar(50),'
from tmp
order by [Option]

set @s=left(@s,len(@s)- 1 )+')
'
 -- заполняем таблицу
 
select @s=@s+
  case when c.[Option]=(select min([Option]) from tmp)
    then 'insert #tmp select '''+b.name+ ''','
    else ''
  end+
  '(select '+b.name+' from tmp where [Option]='+cast(c.[Option] as varchar( 20 ))+')
'+case when c.[Option]=(select max([Option]) from tmp) then '' else ',' end
from sysobjects a
cross join tmp c
join syscolumns b on b.id=a.id and b.name<>'Option'
where a.name='tmp'
order by b.colid, c.[Option]

set @s=@s+'select * from #tmp'

SET NOCOUNT OFF
exec(@s)
 --select @s
 

drop table tmp

Специально "слепил". Так что с Вас 5 баксов :-)
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039528
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот мой вариант (сырой, т.к. я лечусь в клинике доктора Мензиса "Просто треп"):

set nocount on
create table t (mat varchar(7), endc varchar(7), ee varchar(7), op int)
insert into t (mat,endc,ee,op) values('1','11','111',1)
insert into t (mat,endc,ee,op) values('2','22','222',2)
insert into t (mat,endc,ee,op) values('3','33','333',3)
insert into t (mat,endc,ee,op) values('4','44','444',5)
insert into t (mat,endc,ee,op) values('5','55','555',4)

declare @i int set @i=1
declare @s varchar(255) set @s='f varchar(7)'
while @i<=(select count(*) from t)
begin set @s=@s+', op'+cast(@i as varchar(255))+' varchar(7)' set @i=@i+1 end
set @s='create table tt ('+@s+')'
exec(@s)

declare @j int set @j=1 declare @n varchar(255)
while @j<(select count(column_name) from information_schema.columns where table_name="t")
begin
set @n=(select column_name from information_schema.columns where table_name="t" and ordinal_position=@j)
insert into tt (f) values(@n)
set @j=@j+1
end

declare @uu varchar(255)
declare @jj int declare @nn varchar(33) declare @ii int set @ii=1
while @ii<(select count(column_name) from information_schema.columns where table_name="t")
begin
set @jj=1
set @nn=(select column_name from information_schema.columns where table_name="t" and ordinal_position=@ii)
while @jj<=(select count(*) from t)
begin
set @uu='update tt set op' + cast(@jj as varchar(33)) +
'=(select ' + @nn + ' from t where op=' + cast(@jj as varchar(33)) + ') where f="' + @nn+ '"'
exec(@uu)
set @jj=@jj+1
end
set @ii=@ii+1
end
set nocount off
select * from tt
drop table t
drop table tt
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039534
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все бы было хорошо, если бы использовались временные таблицы. Если несколько пользователей попытаются одновременно запустить приведенные выше процедуры -
create table tmp - получиться нехорошо. Я попробовал переписать с использованием временной таблицы #tmp , однако врем. табоица создается естественно в tempDB, причем в тамошнем sysobjects ее имя "#tmp_______________12345 (какое-то число)". В sysobjects текущей базы ее нет.

Может быть можно каким то образом определить ID созданной врем. таблицы?
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039549
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имелось в виду, что "развернуть" мне надо не всю таблицу целиком, а запрос.(который проще запихать во временную таблицу)
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039551
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дайте более детальное описание исходной таблички.....
есть уникальное поле или сочитание полей?
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039742
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>дайте более детальное описание исходной таблички.....
>есть уникальное поле или сочитание полей?


В данном случае таблицы могут быть самые разные, интересует так сказать общий подход.
А для примера ppcIndKey int, CommGenKey int, NPSKey int, Option int – будут уникальными сочетаниями полей.

В принципе, следуя вашему примеру и зная какие поля у меня есть, я могу «собирать» insert команды сам, но Ваше решение с syscolumns гораздо более привликательное, жаль что не работает с временной таблицей.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039765
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто вам мешает самому создавать таблици в tempdb?
главное уникальность... типа номер сессии+случайное число... а после этого юзайте по сехеме...
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039769
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я думал над этим, только еще не пробовал.
Что-то типа создания уникальной врем. таблицы
@TmpTable='#Tmp' & SELECT CAST(CAST(RAND()*1000000000 AS INT) AS VARCHAR(20))

В этом случае будет динамический запрос с динамическим запросом внутри, поскольку имя таблицы нужно будет подставлять во время исполнения.

from sysobjects a
cross join tmp c
join syscolumns b on b.id=a.id and b.name<>'Option'
where a.name=' tmp '
order by b.colid, c.[Option]

Гораздо проще было бы если бы знать id временной таблицы, тогда вместо a.name='tmp' было бы a.id=@id
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039771
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему такая функция и процедура уже есть...
завтра покопаюсь ...
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039787
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для SM.
Сталкивался и решал подобные заморочки.

Да плюньте Вы на все эти извраты.
Что вам нужно? Иметь эту табличку на все времена? И по ней будут делатся другие запросы? Сомневаюсь.

Скорее всего нужно что бы юзер полюбовался на развернутую табличку.

В дельфах, например, это можно, сделать загнав данные в
StringGrid. Ведь не 1000х1000 у Вас будет. А хоть бы и такая. Пускай клиент отдувается. У него рожа толстая - 800 МГц.

Пишу без захода в дельфу и проверки, так что могут быть всякие ошибки.

На форме компонента TStringGrid, имя S. Так же имеется результат запроса Q.

S.rowcount:=Q.FieldCount;
S.colcount:=Q.RecordCount+1;
S.FixedRows:=1;
S.FixedCols:=1;

for row:=1 to Q.FieldCount-1 do
S.Cells[0,row]:=Q.Fields[row-1].FieldName;

col:=1;
while not Q.eof do
begin
S.Cells[col,0]:='Option '+Q.FieldByName('Options').asString;

for row:=1 to Q.FieldCount-1 do
S.Cells[col,row]:=Q.Fields[row-1].asString;

inc(col);
Q.next;
end
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039788
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец, Кэт2! Мочи их всех - ламеров этих, - и своих и заморских. Кстати, объясните мне, самому крупному Ламеру, как будут развиваться события, если перед блоком:
create table tmp (без #)
......
......
drop table tmp
делать проверку на существование таблы "tmp".
Т.е. так, если какой-то юзер в данный момент уже создал эту таблу, но не успел её дропнуть, то воспользоваться уже готовой. Иначе, создавать самому. Я после электрошока плохо (совсем) соображаю.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039799
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF. Для Rattail. Это у тебя в базе что, филиал дурдома? Твои юзеры имеют право создавать нормальные таблички ?
Болезнь очень запущена.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039824
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Cat2
В моей базе, Брут, возможно всё. Поелику не страдам я
паранойей в открытой форме. А ты всё думаешь, что не
выдь ты завтра на работу, так и рубель российский на 30
пунктов упадет. Ты лучче послушат об чём люд рабочий
гуторит на ихних тусовках: кровопивец ты (и бухгалтерия)
для них. У меня т всё по-ленински: сами рабочие себе
проц. премии вручну вводят в кабинках для тайного
голосовання.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32039899
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и ваще.... изврат это все.... если нуно универсально используйте OLAP ....
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040079
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, олапа мне тут только и не хватало...
Что до задачки, это конечно изврат, но уж больно удобно для конечного пользовтеля - дело в том, что инфа в таблице про инженерный компонент, и Option - это соответственно вариации - немного другой мартериал, рабочее давление, толщина стенок.... Всего значимых полей больше 10. Посмотреть на всю эту картину в разрезе опций одновременно - просто слюнки течь начинают у пользовтелей.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040087
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое слово "изврат" относилось не к задаче, а к попыткам сделать ее через SQL. Задача вполне нормальная.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040090
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит изврат - это попытки, а пытающийся - извращенец?
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040092
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то SM... так олап для этого самое хорошое решение...
можеш поюзать попроще.. кажется в MSOffice есть компонет... упрощенный ... но пойдет...
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040096
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, это попытки решить задачу негодными средствами. Я то же склоняюсь к OLAP, но пока не слишком хорошо знаю эту штуковину, так что советовать не рискнул.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040097
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLAP хорош будет для аналитики/статистики. Тут же оперативная работа.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040103
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я когдато делал на клинте такие штуки...
и использовал таки компонент от офиса...
людям нравилось ;)...
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040705
sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Был вопрос как - определить id временной таблицы.
В Sybase есть ф-ция object_id('имя_объекта'), не уверен, что она есть в MS SQL, но вполне возможно.
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040751
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
SET NOCOUNT ON
create table #temp(Materail varchar( 50 ), EndConnection varchar( 50 ), [Option] int)
insert #temp values('A1','FE', 1 )
insert #temp values('A2','BE', 2 )
insert #temp values('A3','FEE', 3 )

 -- создаем таблицу
 
declare @s varchar( 8000 )
set @s='create table #tmp (Field varchar(50),'

select @s=@s+'[Option'+cast([Option] as varchar( 20 ))+'] varchar(50),'
from #temp
order by [Option]

set @s=left(@s,len(@s)- 1 )+')
'
 -- заполняем таблицу
 
select @s=@s+
  case when c.[Option]=(select min([Option]) from #temp)
    then 'insert #tmp select '''+b.name+ ''','
    else ''
  end+
  '(select '+b.name+' from #temp where [Option]='+cast(c.[Option] as varchar( 20 ))+')
'+case when c.[Option]=(select max([Option]) from #temp) then '' else ',' end
from tempdb..sysobjects a
cross join #temp c
join tempdb..syscolumns b on b.id=a.id and b.name<>'Option'
where a.id=object_id('tempdb..#Temp')
order by b.colid, c.[Option]

set @s=@s+'select * from #tmp'

SET NOCOUNT OFF
exec(@s)
 --select @s
 

drop table #temp
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040771
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я подобное тоже делал на клиенте. Только с сервера отдаю два рекордсета: один - описание того, какие поля являются заголовками строк, какое поле является заголовком столбцов, а какое поле является значением, а второй рекордсет - собственно сами данные. "Пара" строк кода по этой инфе строят грид как надо и его заполняют. Все достаточно просто...
...
Рейтинг: 0 / 0
Можно ли "развернуть" таблицу на 90 гр?
    #32040773
Фотография Nickolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще один пример:
-- -------------------------------------------------
-- используемые таблицы
create table table1 (date datetime, value int);
create table table2 (date datetime, value int);
create table table3 (date datetime, value int);

-- ----------------------------------------------------
-- данные в таблицах

-- select * from table1
-- date value
-- --------------------------- -----------
-- 2002-01-10 00:00:00.000 12
-- 2002-01-12 00:00:00.000 14
-- 2002-01-11 00:00:00.000 12
--
-- (3 row(s) affected)

-- select * from table2
-- date value
-- --------------------------- -----------
-- 2002-01-10 00:00:00.000 5
-- 2002-01-11 00:00:00.000 10
--
-- (2 row(s) affected)

-- select * from table3
-- date value
-- --------------------------- -----------
-- 2002-02-12 00:00:00.000 5
--
-- (1 row(s) affected)

-- -------------------------------------------------------------------------------
-- запрос выборки по таблицам
-- -------------------------------------------------------------------------------
if exists (select * from sysobjects where name='dts' and xtype='U')
drop table dts;
-- -------------------------------------------------------------------------------
select date, null as value1, null as value2, null as value3 into dts from table1
union
select date, null as value1, null as value2, null as value3 from table2
union
select date, null as value1, null as value2, null as value3 from table3;
-- -------------------------------------------------------------------------------
update dts set value1=table1.value from table1 where dts.date=table1.date;
update dts set value2=table2.value from table2 where dts.date=table2.date;
update dts set value3=table3.value from table3 where dts.date=table3.date;
-- -------------------------------------------------------------------------------

-- проверка результата
select * from dts;
-- полученный результат
-- date value1 value2 value3
-- --------------------------- ----------- ----------- -----------
-- 2002-01-10 00:00:00.000 12 5 NULL
-- 2002-01-11 00:00:00.000 12 10 NULL
-- 2002-01-12 00:00:00.000 14 NULL NULL
-- 2002-02-12 00:00:00.000 NULL NULL 5
--
-- (4 row(s) affected)
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли "развернуть" таблицу на 90 гр?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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