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

Откуда:
Сообщений: 59
Подскажите, плз, можно в MS SQL такой запрос создать:

Есть две таблицы, например: firms (Фирмы) и Pays (Платежи фирм)
связанные как один ко многим.

Мне нужно запрос, в каждой строке которого данные фирмы (из firms и сумма всех платежей, например, по полю sum_pay из таблицы Pays)

Firms:
id_firms
name_firm

Pays:
id_pays
id_firms
sum_pay

Должно быть:

Фирма / Сумма платежей
------------------------------------
Ромашка 1000
Фонарик 2000
...


--
С уважением,
Сергей
25 окт 04, 11:27    [1057654]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с группировкой из другой таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
SELECT
  Firms.name_firm,
  SUM(Pays.sum_pay ) AS Sum_Pay
FROM
  Firms INNER JOIN Pays ON
  Firms.id_firms = Pays.id_firms
GROUP BY
  Firms.name_firm
ORDER BY
  Firms.name_firm

Если нужно вывести все фирмы, даже если у них не было платежей, то вместо INNER делаем LEFT.
25 окт 04, 11:54    [1057733]     Ответить | Цитировать Сообщить модератору
 Re: Извините, я вопрос задал не корректно  [new]
Sergey A.
Member

Откуда:
Сообщений: 59
Для одной таблицы, конечно просто.
Вот правильный вопрос.
Есть таблица фирмы и, скажем N (пусть - 3) связанных таблиц
- к оплате
- платежи
- издержки

ForPays
id_forpays
id_firms
sum_forpay

Pays
id_pays
id_firms
sum_pays

Izderzhki
id_izderzhki
id_firms
sum_izd

Можно ли одним запросом получить?:

Фирма | Всего к оплате | Всего платежей | Всего издержек |
--------------------------------------------------------------
Ромашка 1000 150 200
Букашка 2000 160 900
Какашка 3000 170 800

--
С уважением,
Сергей
25 окт 04, 12:48    [1057939]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с группировкой из другой таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
На примере двух:

IF OBJECT_ID('Firms') IS NOT NULL
  DROP TABLE Firms
GO
IF OBJECT_ID('Pays') IS NOT NULL
  DROP Table Pays
GO
IF OBJECT_ID('Isdergki') IS NOT NULL
  DROP Table Isdergki
GO

CREATE TABLE Firms (col1 int, col2 char)
GO
CREATE TABLE Pays (col1 int, col2 numeric(19, 4))
GO
CREATE TABLE Isdergki (col1 int, col2 numeric(19, 4))
GO

INSERT INTO Firms VALUES(1, 'A')
INSERT INTO Firms VALUES(2, 'B')
INSERT INTO Firms VALUES(3, 'C')

INSERT INTO Pays VALUES(1, 1)
INSERT INTO Pays VALUES(1, 1)
INSERT INTO Pays VALUES(3, 1)
INSERT INTO Pays VALUES(3, 1)

INSERT INTO Isdergki VALUES(1, 1)
INSERT INTO Isdergki VALUES(1, 1)
INSERT INTO Isdergki VALUES(2, 1)
INSERT INTO Isdergki VALUES(3, 1)

SELECT
 F.col2,
 P.sum_pay,
 I.sum_isd
FROM
  Firms F
  LEFT JOIN 
  (SELECT col1, SUM(col2) AS sum_pay FROM Pays GROUP BY col1) P ON
  F.col1 = P.col1
  LEFT JOIN 
  (SELECT col1, SUM(col2) AS sum_isd FROM Isdergki GROUP BY col1) i ON
  F.col1 = I.col1
25 окт 04, 13:08    [1058025]     Ответить | Цитировать Сообщить модератору
 Спасибо  [new]
Sergey A.
Member

Откуда:
Сообщений: 59
Спасибо.
То, что надо!

--
С уважением,
Сергей
25 окт 04, 13:58    [1058283]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить