Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как построить select или T-SQL процедуру? Help. / 7 сообщений из 7, страница 1 из 1
20.06.2002, 15:58:32
    #32033350
denis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Есть две таблицы:
1.Проводки (prov)

Поля:
id - уник.ID (перв.ключ)
Deb - счет дебета
Kred - счет кредита
sum - сумма
(комбинация счетов дебета и кредита может повторяться)

2.Аналитика по проводкам (an)

Поля:
id - внешний ключ к таб.проводок
Acc - счет (здесь находится счет дебета или кредита - значения поля Deb
или kred из таб. prov)
CatAn - категория аналитики
kodAn - код аналитики

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

Требуется сделать типа:
SELECT Deb,Kred,CatAn,KodAn,SUM(sum)
from Prov,An
group by Deb,Kred,CatAn,KodAn
...
Рейтинг: 0 / 0
20.06.2002, 16:53:05
    #32033358
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Так ты же сам все и написал, надо добавить только связь между таблицами:

SELECT p.Deb,p.Kred,a.CatAn,a.KodAn,SUM(p.sum)
from Prov p INNER JOIN An a ON p.ID=a.ID
group by p.Deb,p.Kred,a.CatAn,a.KodAn
...
Рейтинг: 0 / 0
21.06.2002, 09:36:24
    #32033427
denis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Так получится не тот результат, который нужен.

Просуммируется одна и та же сумма (поле SUM) в таблице prov, такое же кол-во раз, сколько строк есть в таб. An
(по связи prov.ID <-> an.ID)

А это не есть good.

Надо чтобы SUM(Sum) в SELECTe с GROUP BY выдал ту же цифру что и
select sum(sum) from prov
и прогруппировал проводки с одинаковыми категориями
и кодами аналитики
...
Рейтинг: 0 / 0
21.06.2002, 11:22:11
    #32033451
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Тогда непонятно - а из какой записи в таблице An должны братся CatAn и kodAn для текущей prov.ID ? Из первой ? Из последней ? Из произвольной ?
...
Рейтинг: 0 / 0
24.06.2002, 11:06:44
    #32033590
denis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Prov
id Deb Kred Sum
1 20 70 100
2 20 70 200
3 20 70 -50

An
id Acc CatAn KodAn
1 20 'Per' 1
1 70 'Div' 111
2 20 'Per' 2
2 70 'Div' 111
3 20 'Per' 1
3 70 'Div' 111


#temp
Deb Kred KatAnDeb KodAnDeb KatAnKred KodAnKred Sum
20 70 'Per' 1 'Div' 111 100
20 70 'Per' 2 'Div' 111 200
20 70 'Per' 1 'Div' 111 -50

Select Deb,Kred,KatAnDeb,KodAnDeb,KatAnKred,KodAnKred,SUM(Sum)
from #temp
group by Deb,Kred,KatAnDeb,KodAnDeb,KatAnKred,KodAnKred

Результат должен быть:
Deb Kred KatAnDeb KodAnDeb KatAnKred KodAnKred Sum
20 70 'Per' 1 'Div' 111 50
20 70 'Per' 2 'Div' 111 200
...
Рейтинг: 0 / 0
24.06.2002, 15:39:27
    #32033643
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
Что-то вроде такого

Код: 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.
create table #Prov(id int,  Deb int, Kred int,  Sum decimal( 10 ,  2 ))
insert #Prov values( 1 ,  20 ,  70 ,  100 . 00 )
insert #Prov values( 2 ,  20 ,  70 ,  200 . 00 ) 
insert #Prov values( 3 ,  20 ,  70 , - 50 . 00 ) 

create table #An (id int, Acc int, CatAn varchar( 10 ),  KodAn int)
insert #An values( 1 ,  20 , 'Per',  1 ) 
insert #An values( 1 ,  70 , 'Div',  111  )
insert #An values( 2 ,  20 , 'Per',  2  )
insert #An values( 2 ,  70 , 'Div',  111 ) 
insert #An values( 3 ,  20 , 'Per',  1  )
insert #An values( 3 ,  70 , 'Div',  111 )

select Deb, Kred, KatAnDeb, KodAnDeb, KatAnKred, KodAnKred, sum(sum) as sum
from
(select Deb, Kred, 
(select top  1  catan from #an b where b.id = a.id and b.acc = a.deb) AS KatAnDeb, 
(select top  1  kodan from #an b where b.id = a.id and b.acc = a.deb) AS KodAnDeb,
(select top  1  catan from #an b where b.id = a.id and b.acc = a.kred) AS KatAnKred, 
(select top  1  kodan from #an b where b.id = a.id and b.acc = a.kred) AS KodAnKred,
sum(sum) as sum
from #prov a
group by a.id, a.Deb, a.Kred) AS a
group by Deb, Kred, KatAnDeb, KodAnDeb, KatAnKred, KodAnKred


drop table  #Prov
drop table  #An
...
Рейтинг: 0 / 0
24.06.2002, 15:49:16
    #32033645
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить select или T-SQL процедуру? Help.
А если бы в таблице An имелся первичный ключ, то IMHO было бы лучше

Код: 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.
create table #Prov(id int,  Deb int, Kred int,  Sum decimal( 10 ,  2 ))
insert #Prov values( 1 ,  20 ,  70 ,  100 . 00 )
insert #Prov values( 2 ,  20 ,  70 ,  200 . 00 ) 
insert #Prov values( 3 ,  20 ,  70 , - 50 . 00 ) 

create table #An (id int identity, prov_id int, Acc int, CatAn varchar( 10 ),  KodAn int)
insert #An values( 1 ,  20 , 'Per',  1 ) 
insert #An values( 1 ,  70 , 'Div',  111  )
insert #An values( 2 ,  20 , 'Per',  2  )
insert #An values( 2 ,  70 , 'Div',  111 ) 
insert #An values( 3 ,  20 , 'Per',  1  )
insert #An values( 3 ,  70 , 'Div',  111 )

select Deb, Kred, b.acc AS KatAnDeb, b.kodan AS KodAnDeb, c.acc AS KatAnKred, c.kodan AS KodAnKred
, sum(sum) as sum
from
(select Deb, Kred, MAX(b.id) AS AnDebID, MAX(c.id) AS AnKredID, 
sum(sum) as sum
from #prov a
left outer join #an b on b.prov_id = a.id and b.acc = a.deb
left outer join #an c on c.prov_id = a.id and c.acc = a.kred
group by a.id, a.Deb, a.Kred
) AS a
left outer join #an b on b.id = AnDebID
left outer join #an c on c.id = AnKredID
group by Deb, Kred, b.acc, b.kodan, c.acc, c.kodan

drop table  #Prov
drop table  #An
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как построить select или T-SQL процедуру? Help. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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