Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Незатейливый запрос не работает:-(  [new]
maxus78
Member

Откуда:
Сообщений: 6
Есть три таблицы. Одна содержит данные об оплате (iddoc,paymentsum,debt), другая-информацию о заказе (iddoc,customer,docsum) и третья содержит записи об исполнителях заказа (iddoc,employee,employee_sum). Соответственно, в 1 и 3 таблицах по одному iddoc может быть несколько записей. Во второй таблице-iddoc - ключевое поле.
Пытаюсь получить запрос вида:

SELECT     SUM(dbo.Table1.payment) AS Expr1, dbo.Table2.customer, dbo.Table2.docsum, SUM(dbo.Table3.employee_sum) AS Expr2
FROM         dbo.Table1 RIGHT OUTER JOIN
                      dbo.Table2 ON dbo.Table1.iddoc = dbo.Table2.iddoc LEFT OUTER JOIN
                      dbo.Table3 ON dbo.Table2.iddoc = dbo.Table3.iddoc
GROUP BY dbo.Table2.customer, dbo.Table2.docsum

В итоге Expr1 - правильно, а expr2 - в несколько раз больше, судя по всему, в зависимости от числа строк, соответствующих значению iddoc в table 1.
Вопрос: подскажите, пожалуйста, что делать с этой мегаконструкцией. Можно, конечно, попробовать разделить expr2 на count(*), но это как-то стремно.
Благодарю за любые комментариии.
7 дек 05, 09:29    [2147573]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34240
Блог
Скрипт таблиц, тестовые данные(INSERT бла-бла-бла), что должно получится?
7 дек 05, 09:42    [2147600]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
maxus78
Member

Откуда:
Сообщений: 6
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Table2]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Table1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Table3]
GO

CREATE TABLE [dbo].[Table2] (
	[iddoc] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[customer] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[docsum] [float] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table1] (
	[iddoc] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[payment] [float] NULL ,
	[debt] [float] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table3] (
	[iddoc] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[employee] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
	[employee_sum] [float] NULL 
) ON [PRIMARY]
GO

INSERT INTO Table1 (iddoc,payment,debt) VALUES('1',100,100)
INSERT INTO Table1 (iddoc,payment,debt) VALUES('1',50,-50)
INSERT INTO Table2 (iddoc,customer,docsum) VALUES('1','100',500)
INSERT INTO Table3 (iddoc,employee,employee_sum) VALUES('1','50',20)
INSERT INTO Table3 (iddoc,employee,employee_sum) VALUES('1','50',30)

GO

В итоге хотелось бы получить сумму всех значений поля payment в table1 и сумму всех значений поля employee_sum в table3, соответствующих iddoc в table2. Плюс значения полей docsum и customer в table2.
7 дек 05, 09:55    [2147638]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
SELECT 
  dbo.Table2.customer
  , dbo.Table2.docsum
  , (select sum(dbo.Table1.payment) from dbo.Table1 where dbo.Table1.iddoc = dbo.Table2.iddoc)
  , (select sum(dbo.Table3.employee_sum) from dbo.Table3 where dbo.Table1.iddoc = dbo.Table3.iddoc)
FROM dbo.Table2 

-- или так:
SELECT 
  dbo.Table2.customer
  , dbo.Table2.docsum
  , Table1Sum.paymentSum
  , Table3Sum.employee_sum_Sum
FROM dbo.Table2 
  left join 
    (select dbo.Table1.iddoc, sum(dbo.Table1.payment) as paymentSum 
     from dbo.Table1 group by dbo.Table1.iddoc) as Table1Sum on
    dbo.Table2.iddoc = Table1Sum.iddoc
  left join 
    (select dbo.Table3.iddoc, sum(dbo.Table3.employee_sum) as employee_sum_Sum 
     from dbo.Table3 group by dbo.Table3.iddoc) as Table3Sum on
    dbo.Table2.iddoc = Table3Sum.iddoc
7 дек 05, 09:57    [2147644]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
пардон, чуть-чуть ошибся в первом варианте:
where dbo.Table1.iddoc = dbo.Table3.iddoc
читать как:
where dbo.Table2.iddoc = dbo.Table3.iddoc
7 дек 05, 10:02    [2147659]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
maxus78
Member

Откуда:
Сообщений: 6
Ну вот, век живи, век учись:-) Спасибо большое. Видать, совсем я деревянный, что сам не допёр:-) Первый вариант у меня, кстати, не пошел. А второй-песня просто. Спасибо!
7 дек 05, 10:04    [2147666]     Ответить | Цитировать Сообщить модератору
 Re: Незатейливый запрос не работает:-(  [new]
maxus78
Member

Откуда:
Сообщений: 6
Теперь и первый запахал. Большое человеческое спасибо!
7 дек 05, 10:06    [2147677]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить