powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SOS !
25 сообщений из 25, страница 1 из 1
SOS !
    #32038965
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть таблица
Код: 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
SOS !
    #32038971
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SOS !
    #32038978
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Rom

Присоединяюсь
...
Рейтинг: 0 / 0
SOS !
    #32038981
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос хорош, но есть одно но !
На один месяц может быть несколько сумм ...
А надо показать каждую ...
PS
еслиб все так просто, я бы и сам написал ... :)
...
Рейтинг: 0 / 0
SOS !
    #32038982
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем как тебе нужно но всеже...
Код: 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
SOS !
    #32038998
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каким же макаром ты хочешь их засунуть во вторую таблицу ?
...
Рейтинг: 0 / 0
SOS !
    #32039003
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то ROM
да ни каким....
как я понял может быть несколько сумм в одном месяце
и отображать их надо все...
и если надо показывать как хочет Sanek то теперь надо из получившегося развернуть бо месяцам....
да илегче это сделать на клиенте....
но если оч нужно могу и на transact написать....
...
Рейтинг: 0 / 0
SOS !
    #32039004
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На данный момент я написал так:

Код: 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
SOS !
    #32039009
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кинь на мыло тестовые данные....
...
Рейтинг: 0 / 0
SOS !
    #32039015
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SOS !
    #32039024
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как я понимаю sanek хочет в одной строке были раскинуты суммы без null по возможности...
если не так прошу меня поправить...
самому тестовые данные делать некогда....
...
Рейтинг: 0 / 0
SOS !
    #32039027
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RE: MiCe

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

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

Код: 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
SOS !
    #32039040
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем не подходит последний вариант ?
...
Рейтинг: 0 / 0
SOS !
    #32039044
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боюсь показаться навязчивым
Код: 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
SOS !
    #32039058
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RE ROM
Если мне не изменяют мои глаза, то твое предложение один в один повторяет тот вариант, что я уже написал. Этот вариант плох (или мне так кажеться) тем, что для его выполнения необходимо выполнять цикл ...


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


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