Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SOS ! / 25 сообщений из 25, страница 1 из 1
26.07.2002, 10:12:29
    #32038965
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
У меня есть таблица
Код: plaintext
create table (month int , summ money)
в этой таблице записаны суммы по месяцам, при этом любой из месяцов может отсутствовать, а мне надо построить таблицу типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table (
month1 money,
month2 money,
month3 money,
month4 money,
month5 money,
month6 money,
month7 money,
month8 money,
month9 money,
month10 money,
month11 money,
month12 money
)

Чую, что можно сделать это одним запросом используя join
но как написать не лезет в голову. Должен же быть некий join тип Left или Riht , но который может связывать и пустые строки ...
...
Рейтинг: 0 / 0
26.07.2002, 10:21:06
    #32038971
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
insert into Table2
select
sum(summ) from Table1 where month = 1,
sum(summ) from Table1 where month = 2,
sum(summ) from Table1 where month = 3,
sum(summ) from Table1 where month = 4,
sum(summ) from Table1 where month = 5,
sum(summ) from Table1 where month = 6,
sum(summ) from Table1 where month = 7,
sum(summ) from Table1 where month = 8,
sum(summ) from Table1 where month = 9,
sum(summ) from Table1 where month = 10,
sum(summ) from Table1 where month = 11,
sum(summ) from Table1 where month = 12
...
Рейтинг: 0 / 0
26.07.2002, 10:28:51
    #32038978
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
2Rom

Присоединяюсь
...
Рейтинг: 0 / 0
26.07.2002, 10:41:46
    #32038981
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
Запрос хорош, но есть одно но !
На один месяц может быть несколько сумм ...
А надо показать каждую ...
PS
еслиб все так просто, я бы и сам написал ... :)
...
Рейтинг: 0 / 0
26.07.2002, 10:47:11
    #32038982
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
не совсем как тебе нужно но всеже...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare @t as table (m int not null)
insert @t select  1 
insert @t select  2 
insert @t select  3 
insert @t select  4 
insert @t select  5 
insert @t select  6 
insert @t select  7 
insert @t select  8 
insert @t select  9 
insert @t select  10 
insert @t select  11 
insert @t select  12 
select t.m,summ from @t t LEFT JOIN table1 t1 ON  t.m=t1.[month]
 
...
Рейтинг: 0 / 0
26.07.2002, 11:23:15
    #32038998
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
каким же макаром ты хочешь их засунуть во вторую таблицу ?
...
Рейтинг: 0 / 0
26.07.2002, 11:35:45
    #32039003
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
то ROM
да ни каким....
как я понял может быть несколько сумм в одном месяце
и отображать их надо все...
и если надо показывать как хочет Sanek то теперь надо из получившегося развернуть бо месяцам....
да илегче это сделать на клиенте....
но если оч нужно могу и на transact написать....
...
Рейтинг: 0 / 0
26.07.2002, 11:35:58
    #32039004
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
На данный момент я написал так:

Код: 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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
CREATE TABLE #TEMP 
	(
		Year		integer,
		Month		integer,
		GT		integer,
		CategoryID	integer,
		InsureSumma	money
	)

 /*
  Запихивание значений в таблицу #TEMP 
*/ 

CREATE TABLE #REPORT
(
GT 	INT 	null,
CategoryID int  null,
Month1 	money	null,
Month2 	money	null,
Month3 	money	null,
Month4 	money	null,
Month5 	money	null,
Month6 	money	null,
Month7 	money	null,
Month8 	money	null,
Month9 	money	null,
Month10 money	null,
Month11 money	null,
Month12 money	null
)


SET @MonthCount =  1 

while @MonthCount <  13 
	begin
	insert inTo #REPORT
	Select 	GT,
               	CategoryID,
		(case @MonthCount when  1  then InsureSumma else null end) as Month1,
		(case @MonthCount when  2  then InsureSumma else null end) as Month2,
		(case @MonthCount when  3  then InsureSumma else null end) as Month3,
		(case @MonthCount when  4  then InsureSumma else null end) as Month4,
		(case @MonthCount when  5  then InsureSumma else null end) as Month5,
		(case @MonthCount when  6  then InsureSumma else null end) as Month6,
		(case @MonthCount when  7  then InsureSumma else null end) as Month7,
		(case @MonthCount when  8  then InsureSumma else null end) as Month8,
		(case @MonthCount when  9  then InsureSumma else null end) as Month9,
		(case @MonthCount when  10  then InsureSumma else null end) as Month10,
		(case @MonthCount when  11  then InsureSumma else null end) as Month11,
		(case @MonthCount when  12  then InsureSumma else null end) as Month12

	  from #TEMP T1
	where Month = @MonthCount
	SET @MonthCount = @MonthCount +  1 
	end


Могут ли быть еще варианты ?
...
Рейтинг: 0 / 0
26.07.2002, 11:44:23
    #32039009
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
кинь на мыло тестовые данные....
...
Рейтинг: 0 / 0
26.07.2002, 11:53:48
    #32039015
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
2 MiCe на клиенте ничего делать не надо

2 Sanek попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
insert inTo #REPORT
	Select 	GT,
               	CategoryID,
		(case Month when  1  then InsureSumma else null end),
		(case Month when  2  then InsureSumma else null end),
		(case Month when  3  then InsureSumma else null end),
		(case Month when  4  then InsureSumma else null end),
		(case Month when  5  then InsureSumma else null end),
		(case Month when  6  then InsureSumma else null end),
		(case Month when  7  then InsureSumma else null end),
		(case Month when  8  then InsureSumma else null end),
		(case Month when  9  then InsureSumma else null end),
		(case Month when  10  then InsureSumma else null end),
		(case Month when  11  then InsureSumma else null end),
		(case Month when  12  then InsureSumma else null end)
	  from #TEMP T1
...
Рейтинг: 0 / 0
26.07.2002, 12:04:13
    #32039024
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
как я понимаю sanek хочет в одной строке были раскинуты суммы без null по возможности...
если не так прошу меня поправить...
самому тестовые данные делать некогда....
...
Рейтинг: 0 / 0
26.07.2002, 12:06:45
    #32039027
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
RE: MiCe

Именно ! В точку !
а связ по GT,CategoryID
...
Рейтинг: 0 / 0
26.07.2002, 12:09:25
    #32039028
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
если таблица @REPORT пуста, то какая ...... связь ?
...
Рейтинг: 0 / 0
26.07.2002, 12:10:30
    #32039030
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
насколько срочно решение?
...
Рейтинг: 0 / 0
26.07.2002, 12:12:03
    #32039031
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
уникальна ли связка gt categoryid в пределах месяца?
...
Рейтинг: 0 / 0
26.07.2002, 12:18:04
    #32039033
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
Да решение не срочно , ведь написал уже , просто мне казалось, что это можно сделать проще .....

А связка gt categoryid уникальна .
...
Рейтинг: 0 / 0
26.07.2002, 12:21:14
    #32039035
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
тоесть в одном месяце gt +categoryid только одна сумма?
...
Рейтинг: 0 / 0
26.07.2002, 12:22:23
    #32039039
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
Как-нибудь так наверное:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select main.gt,main.categoryid,
t1.insuresumma,t2.insuresumma,t3.insuresumma,t4.insuresumma,
t5.insuresumma,t6.insuresumma,t7.insuresumma,t8.insuresumma,
t9.insuresumma,t10.insuresumma,t11.insuresumma,t12.insuresumma,
from (select distinct gt,categoryid from #temp) as main
left outer join (select gt,categoryid,insuresumma from #temp where month= 1 ) as t1 on main.gt=t1.gt and main.categoryid=t1.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 2 ) as t2 on main.gt=t2.gt and main.categoryid=t2.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 3 ) as t3 on main.gt=t3.gt and main.categoryid=t3.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 4 ) as t4 on main.gt=t4.gt and main.categoryid=t4.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 5 ) as t5 on main.gt=t5.gt and main.categoryid=t5.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 6 ) as t6 on main.gt=t6.gt and main.categoryid=t6.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 7 ) as t7 on main.gt=t7.gt and main.categoryid=t7.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 8 ) as t8 on main.gt=t8.gt and main.categoryid=t8.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 9 ) as t9 on main.gt=t9.gt and main.categoryid=t9.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 10 ) as t10 on main.gt=t10.gt and main.categoryid=t10.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 11 ) as t11 on main.gt=t11.gt and main.categoryid=t11.categoryid
left outer join (select gt,categoryid,insuresumma from #temp where month= 12 ) as t12 on main.gt=t12.gt and main.categoryid=t12.categoryid
...
Рейтинг: 0 / 0
26.07.2002, 12:22:50
    #32039040
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
чем не подходит последний вариант ?
...
Рейтинг: 0 / 0
26.07.2002, 12:26:51
    #32039044
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
боюсь показаться навязчивым
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
insert inTo #REPORT
	Select 	GT,
               	CategoryID,
		(case Month when  1  then InsureSumma else null end),
		(case Month when  2  then InsureSumma else null end),
		(case Month when  3  then InsureSumma else null end),
		(case Month when  4  then InsureSumma else null end),
		(case Month when  5  then InsureSumma else null end),
		(case Month when  6  then InsureSumma else null end),
		(case Month when  7  then InsureSumma else null end),
		(case Month when  8  then InsureSumma else null end),
		(case Month when  9  then InsureSumma else null end),
		(case Month when  10  then InsureSumma else null end),
		(case Month when  11  then InsureSumma else null end),
		(case Month when  12  then InsureSumma else null end)
	  from #TEMP T1
...
Рейтинг: 0 / 0
26.07.2002, 12:47:39
    #32039058
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
RE ROM
Если мне не изменяют мои глаза, то твое предложение один в один повторяет тот вариант, что я уже написал. Этот вариант плох (или мне так кажеться) тем, что для его выполнения необходимо выполнять цикл ...


RE VVG_
ЩА попробую, но текст прям так сразу силен ! без стакана никак ! :)
...
Рейтинг: 0 / 0
26.07.2002, 12:53:16
    #32039060
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
Санек, ты че, какой цикл, разунь глаза !
...
Рейтинг: 0 / 0
26.07.2002, 13:03:48
    #32039067
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
RE Rom
Разул !
Понял !
Осознал !
САМ ДУРАК ! :) туплю ... :))))
...
Рейтинг: 0 / 0
26.07.2002, 14:14:29
    #32039093
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
ИМХО VVG_ абсолютно верно....
ток написать
Код: plaintext
select ... into #report 
...
Рейтинг: 0 / 0
26.07.2002, 14:53:58
    #32039112
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS !
Если еще одну временную таблицу делать, то алиасы придется к каждому столбцу писать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SOS ! / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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