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

Откуда:
Сообщений: 27
Добрый день всем.
Мне задали отчет.
В отчете нужна информация из двух таблиц.
В первой информация по выданным займам, во второй фактические оплаты по этим займам.
У меня получилось вывести все оплаты за период, в отчете получаю информацию по фактическим оплатам (сумму оплат по займу), но мне также нужно видеть в этом отчете займы по которым нет оплат (в отчете это должно выглядеть как 0).
Помогите довести отчет до желаемого.


SELECT
dbo.ORDERS.ID,
dbo.ORDERS.NUMBER,
dbo.ORDERS.DAYSQUANT,
dbo.ORDERS.LOANCOSTALL,
dbo.ORDERS.MAINPERCENT,
Sum(dbo.ORDER_PAYMENT.COSTALL)

FROM
dbo.ORDERS
INNER JOIN dbo.ORDER_PAYMENT ON dbo.ORDER_PAYMENT.ORDERID = dbo.ORDERS.ID
WHERE
FLOOR(dbo.ORDERS.PUTDATETIME) >= 41562 AND
FLOOR(dbo.ORDERS.PUTDATETIME) <= 41625 AND
dbo.ORDERS.ENABLED = 1 AND
dbo.ORDER_PAYMENT.ENABLED = 1
GROUP BY
dbo.ORDERS.ID,
dbo.ORDERS.NUMBER,
dbo.ORDERS.DAYSQUANT,
dbo.ORDERS.LOANCOSTALL,
dbo.ORDERS.MAINPERCENT
ORDER BY
dbo.ORDERS.NUMBER ASC
26 янв 14, 11:10    [15470246]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
Glory
Member

Откуда:
Сообщений: 104751
rezik81
Помогите довести отчет до желаемого.

Используйте OUTER JOIN, а не INNER JOIN
26 янв 14, 11:15    [15470250]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
rezik81
Member

Откуда:
Сообщений: 27
Сделал следующий запрос, но займов со значениями по оплатам NULL я не получил. Во второй таблице если есть строка то значит была оплата, а если нет строки значит оплаты не было.
26 янв 14, 11:35    [15470280]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
Glory
Member

Откуда:
Сообщений: 104751
rezik81
Сделал следующий запрос, но займов со значениями по оплатам NULL я не получил.

Потому что у вас where по таблице ORDER_PAYMENT
Это условие должно быть в условии JOIN
26 янв 14, 11:37    [15470284]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
rezik81
Member

Откуда:
Сообщений: 27
в таблице order.payment стоит равно 1 т.к. если это значение не ставить, то в результате могут быть платежи, которые удалили (не в таблице а в системе, удаленные платежи остаются в таблице но в столбце enable устанавливается 0)
26 янв 14, 14:57    [15470740]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
Glory
Member

Откуда:
Сообщений: 104751
rezik81
в таблице order.payment стоит равно 1 т.к. если это значение не ставить,

А кто сказал не ставить ? Я сказал - поставить в правильное место запроса
26 янв 14, 14:59    [15470749]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
rezik81
Member

Откуда:
Сообщений: 27
INNER JOIN dbo.ORDER_PAYMENT ON dbo.ORDER_PAYMENT.ORDERID = dbo.ORDERS.ID вот конструкция, здесь связываю обе таблицы.
Мне к этому нужно добавить еще столбцы из таблицы с оплатами или вместо?
26 янв 14, 15:13    [15470774]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
Glory
Member

Откуда:
Сообщений: 104751
rezik81
Мне к этому нужно добавить еще столбцы из таблицы с оплатами или вместо?

Вы ответ полностью прочитали ?
26 янв 14, 15:16    [15470780]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
rezik81
Member

Откуда:
Сообщений: 27
SELECT
dbo.ORDERS.ID,
dbo.ORDERS.NUMBER,
dbo.ORDERS.DAYSQUANT,
dbo.ORDERS.LOANCOSTALL,
dbo.ORDERS.MAINPERCENT,
dbo.ORDER_PAYMENT.COSTALL

FROM
dbo.ORDERS
LEFT JOIN dbo.ORDER_PAYMENT ON dbo.ORDER_PAYMENT.ORDERID = dbo.ORDERS.ID
WHERE
FLOOR(dbo.ORDERS.PUTDATETIME) >= 41562 AND
FLOOR(dbo.ORDERS.PUTDATETIME) <= 41625 AND
dbo.ORDERS.ENABLED = 1
--AND
--dbo.ORDER_PAYMENT.ENABLED = 1
ORDER BY
dbo.ORDERS.NUMBER ASC

Этим я добился, что теперь null выводится :) Сейчас попробую догадаться, куда именно вставить dbo.ORDER_PAYMENT.ENABLED = 1
26 янв 14, 15:27    [15470793]     Ответить | Цитировать Сообщить модератору
 Re: подскажите как доработать отчет  [new]
rezik81
Member

Откуда:
Сообщений: 27
SELECT
dbo.ORDERS.ID,
dbo.ORDERS.NUMBER,
dbo.ORDERS.DAYSQUANT,
dbo.ORDERS.LOANCOSTALL,
dbo.ORDERS.MAINPERCENT,
Sum(dbo.ORDER_PAYMENT.COSTALL)

FROM
dbo.ORDERS
LEFT OUTER JOIN dbo.ORDER_PAYMENT ON dbo.ORDER_PAYMENT.ORDERID = dbo.ORDERS.ID AND dbo.ORDER_PAYMENT.ENABLED = dbo.ORDERS.ENABLED
WHERE
FLOOR(dbo.ORDERS.PUTDATETIME) >= 41562 AND
FLOOR(dbo.ORDERS.PUTDATETIME) <= 41625 AND
dbo.ORDERS.ENABLED = 1
--AND
--dbo.ORDER_PAYMENT.ENABLED = 1
GROUP BY
dbo.ORDERS.ID,
dbo.ORDERS.NUMBER,
dbo.ORDERS.DAYSQUANT,
dbo.ORDERS.LOANCOSTALL,
dbo.ORDERS.MAINPERCENT
ORDER BY
dbo.ORDERS.NUMBER ASC


Вот так сработало, ну и просуммировало платежи по одному займу.
to Glory Спасибо за наводку)
26 янв 14, 15:39    [15470819]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить