Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.124.24] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (15) 1 [2] 3 4 ... 14 15 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Можно я все глупые вопросы буду писать тут?
use PJM10 SELECT sum(PaymentDetail.Value) AS СуммаПриход, QUOTENAME(Company.FileAs,'"') AS Компания, sum(TimeEntry.Rate) AS СуммаРасхода FROM PaymentDetail INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID INNER JOIN Company ON Payment.PayerCompanyID = Company.ID INNER JOIN Invoice ON PaymentDetail.InvoiceID = Invoice.ID INNER JOIN Project ON Invoice.ProjectID = Project.ID INNER JOIN TimeEntry ON Project.ID = TimeEntry.ProjectID WHERE (Payment.FileAs LIKE N'%-1%') AND (Payment.Date BETWEEN '01.01.2017' AND '31.08.2017') GROUP BY Company.FileAs ORDER BY Company.FileAs Project - таблица проектов TimeEntry - таблица учета времени\затрат по проектам Не могу понять как мне сделать так, чтобы SQL суммировал все TimeEntry.Rate для каждого данного проекта. Добавлено А то получается сейчас берется как понимаю первое вхождение |
Сообщ.
#17
,
|
|
|
^D^ima, а почему ты именно INNER JOIN делаешь, а не LEFT JOIN?
|
Сообщ.
#18
,
|
|
|
Цитата kosten @ LEFT JOIN Я пробовал разные варианты, проблему это не решает. Если была это 1с-ка было бы все легко. Тут как понимаю если делать встроенный запрос в запрос, то вначале выполняется 2-й встроенный, потом первый... |
Сообщ.
#19
,
|
|
|
^D^ima, давай-ка структура таблиц.
|
Сообщ.
#20
,
|
|
|
Цитата kosten @ почему ты именно INNER JOIN делаешь, а не LEFT JOIN? А что в запросе могло натолкнуть на мысль о необходимости LEFT JOIN??? Цитата ^D^ima @ как мне сделать так, чтобы SQL суммировал все TimeEntry.Rate для каждого данного проекта. У тебя в запросе выполняется группировка по Company.FileAs. Такая группа - один проект? |
Сообщ.
#21
,
|
|
|
Задача: Сделать отчет Клиент, СуммаПоступила, СуммаПотрачена
Связанность таблиц: Payment и PaymentDetail это платежи денег, которые поступают на счет, из них берется Клиент и СуммаПоступила далее сложнее. В каждом платеже есть только 1 счет. Таблица Invoice. Каждый счет связан с конкретным проектом. Таблица Project. В каждом проекте есть учет времени. Таблица TimeEntry, из которой берется TimeEntry.Rate СуммаПотрачена. Трудность в том что в каждом проекте может быть много учетов времени, которые нужно суммировать. 1 платеж - 1 счет - 1 проект - много учетов времени |
Сообщ.
#22
,
|
|
|
Цитата ^D^ima @ 1 платеж - 1 счет - 1 проект - много учетов времени У одного проекта строго один счёт - допускаю. У одного счёта - один проект или много? У одного счёта строго один платёж - не верю. |
Сообщ.
#23
,
|
|
|
Akina
В 1 платеже -> 1 счет(не бывает счета связанного с несколькими платежами) -> каждый счет связан с 1 проектом (не бывает одного счета связанного с 2 проектами) -> каждый проект связан со многими записями о времени. |
Сообщ.
#24
,
|
|
|
Цитата ^D^ima @ не бывает счета связанного с несколькими платежами Если оплата по проекту разбита по времени, то каждый раз надо платить на разные счета? |
Сообщ.
#25
,
|
|
|
Цитата ^D^ima @ В 1 платеже -> 1 счет(не бывает счета связанного с несколькими платежами) Т.е. не только "в 1 платеже -> 1 счет", но и "в 1 счёте - 1 платёж". Я верно понял? Ибо в схеме-то, что наверху, я вижу как бы иное... |
Сообщ.
#26
,
|
|
|
Цитата Akina @ Т.е. не только "в 1 платеже -> 1 счет", но и "в 1 счёте - 1 платёж". Я верно понял? В таблице платежа есть ссылка на счет, в счете ссылки на платеж нет. Цитата kosten @ Если оплата по проекту разбита по времени, то каждый раз надо платить на разные счета? Возможно что к проекту привязан не 1 счет, но от этого цепочка не меняется |
Сообщ.
#27
,
|
|
|
Цитата ^D^ima @ в счете ссылки на платеж нет Пробегал мимо, суть задачи не уловил. Но осуждаю Если связь A->B есть, а B->A нет, но нужна, то просто "склеивайте" нужный запрос с нужным порядком полей, и пользуйте его как "источник". Сорри, если не в тему, и не впопад) |
Сообщ.
#28
,
|
|
|
Моя задача не решает в принципе или я неверно изложил?
|
Сообщ.
#29
,
|
|
|
Да решается она, решается. Просто ты её неполно изложил, а догадываться тупо лень.
Если, ориентируясь на твой запрос, составить эскиз схемы данных, то получится что-то типа Прикреплённый файл1.png (15,13 Кбайт, скачиваний: 1420) . Дорисуй, где один, а где много... |
Сообщ.
#30
,
|
|
|
Akina
Все верно. везде 1, TimeEntry много. Я имею в ввиду что в таблице TimeEntry много вхождений по одному ProjectID |