Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с полным внешним объединением ! / 3 сообщений из 3, страница 1 из 1
10.12.2001, 06:40
    #32018664
Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с полным внешним объединением !
MSSQL 7.0. Есть две таблицы:1)ID потребителя,Год,Месяц,начислено 2) ID потребителя,Год,Месяц,оплачено. Надо сделать выборку - по потребителю в каждом месяце начисление и оплата. Я делаю полное внешнее объединение по ID потребителя,Год,Месяц,но в случае нескольких начислений в месяце он выдает:
ID потребителя,Год,Месяц,начислено1 ID потребителя,Год,Месяц,оплачено1
ID потребителя,Год,Месяц,начислено2 ID потребителя,Год,Месяц,оплачено1
Как получить:
ID потребителя,Год,Месяц,начислено1 ID потребителя,Год,Месяц,оплачено1
ID потребителя,Год,Месяц,начислено2 NULL NULLNULL NULL
Я додумался - надо дополнительно нумеровать записи по каждому периоду - но как это сделать ? Может быть еще способы ?
...
Рейтинг: 0 / 0
10.12.2001, 07:19
    #32018667
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с полным внешним объединением !
SELECT [ID потребителя],[Год], [Месяц], SUM([начислено]), SUM([оплачено]) FROM
(SELECT [ID потребителя],[Год], [Месяц], [начислено], 0 AS [оплачено] FROM table1
UNION ALL
SELECT [ID потребителя],[Год], [Месяц], 0 AS [начислено], [оплачено] FROM table2
) AS a
GROUP BY [ID потребителя],[Год], [Месяц]

?
...
Рейтинг: 0 / 0
10.12.2001, 08:11
    #32018675
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с полным внешним объединением !
Судя по всему, Вам, Сергей не хочется применять агрегатные функции, то есть хочется иметь список сумм внутри одного месяца, а не результирующую сумму за весь месяц целиком. В этом случае действительно не обойтись без дополнительной нумерации.

Вот пример:

--СОЗДАНИЕ ТАБЛИЦ
create table #nach(id int identity(1,1),idpotr int not null, year int not null, month int not null, summa money not null, extid int null)
create table #opl(id int identity(1,1),idpotr int not null, year int not null, month int not null, summa money not null, extid int null)

--ЗАПОЛНЕНИЕ ТАБЛИЦ
insert into #nach(idpotr,year,month,summa) values(1,2000,1,1000.00)
insert into #nach(idpotr,year,month,summa) values(1,2000,1,1200.00)
insert into #nach(idpotr,year,month,summa) values(1,2000,1,1500.00)

insert into #nach(idpotr,year,month,summa) values(2,2000,1,3000.00)
insert into #nach(idpotr,year,month,summa) values(2,2000,1,5000.00)


insert into #opl(idpotr,year,month,summa) values(1,2000,1,5000.00)

insert into #opl(idpotr,year,month,summa) values(1,2000,2,1000.00)
insert into #opl(idpotr,year,month,summa) values(1,2000,2,2000.00)

insert into #opl(idpotr,year,month,summa) values(2,2000,1,1000.00)
insert into #opl(idpotr,year,month,summa) values(2,2000,1,2000.00)
insert into #opl(idpotr,year,month,summa) values(2,2000,1,5000.00)

insert into #opl(idpotr,year,month,summa) values(2,2000,2,7000.00)

--НУМЕРОВАНИЕ ЗАПИСЕЙ В ПЕРИОДЕ

UPDATE n
Set
extid=(Select Count(*) from #nach nn where n.idpotr=nn.idpotr and n.year=nn.year and n.month=nn.month and n.id>=nn.id)
From
#nach n

UPDATE o
Set
extid=(Select Count(*) from #opl oo where o.idpotr=oo.idpotr and o.year=oo.year and o.month=oo.month and o.id>=oo.id)
From
#opl o

--Select * from #nach
--Select * from #opl

--РЕЗУЛЬТИРУЮЩИЙ SELECT
Select
ISNULL(n.idpotr,o.idpotr) As [Потребитель],
ISNULL(n.year,o.year) As [Год],
ISNULL(n.month,o.month) As [Месяц],
n.summa As [Начислено], /*можно использовать IsNull для выведения вместо NULL нулей*/
o.summa As [Оплачено] /*можно использовать IsNull для выведения вместо NULL нулей*/
From
#nach n
FULL OUTER JOIN #opl o
ON n.idpotr=o.idpotr and n.year=o.year and n.month=o.month and n.extid=o.extid
ORDER BY
ISNULL(n.idpotr,o.idpotr),
ISNULL(n.year,o.year),
ISNULL(n.month,o.month)

drop table #nach
drop table #opl
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с полным внешним объединением ! / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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