SQL - ограничение объединенных записей по дате - PullRequest
0 голосов
/ 03 марта 2011

Использование двух таблиц в MSSQL:

Одна таблица, [ЗАКАЗЧИК], содержащая информацию о донорах. - Удалить столбцы: [CustID], [Имя] Одна таблица [DONATION], содержащая записи для каждого пожертвования. - Удалить столбцы: [CustID], [Amount], [Date] Таблицы имеют общий ключ, [CustID].

Я хочу объединить [Суммы] в соответствии с каждым [CustID]

SELECT DONATION.CUSTID
,PEOPLE.NAME
,SUM (DONATION.AMOUNT) as TOTAL_DONATION
FROM [dbo].[DONATION] INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
GROUP BY
DONATION.CUSTID
,PEOPLE.NAME
HAVING SUM (DONATION.AMOUNT) > 100

Этот запрос работает нормально , даже с добавлением предложения HAVING.

Когда я хочу ограничить даты сбора пожертвований для агрегирования (добавляя к предложениям SELECT, GROUP BY и HAVING), однако ...

SELECT DONATION.CUSTID
,PEOPLE.NAME,DONATION.DATE
,SUM (DONATION.AMOUNT) as TOTAL_DONATION
    FROM [dbo].[DONATION] INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
    GROUP BY
DONATION.CUSTID
,PEOPLE.NAME
,DONATION.DATE
HAVING SUM (DONATION.AMOUNT) > 100
and DONATION.DATE > '1-1-2010'

Запрос больше не возвращает совокупные суммы пожертвований каждого человека, но возвращает индивидуальные пожертвования для каждого человека, которые соответствуют критериям HAVING.

Как я могу реализовать это ограничение даты? Это как я присоединяюсь или суммирую или ....? Спасибо.

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Переместите его в пункт WHERE

SELECT DONATION.CUSTID
      ,PEOPLE.NAME
      ,SUM (DONATION.AMOUNT) as TOTAL_DONATION
FROM [dbo].[DONATION]
INNER JOIN [dbo].[PEOPLE] ON DONATION.CUSTID = PEOPLE.CUSTID
WHERE DONATION.DATE > '1-1-2010'
GROUP BY
       DONATION.CUSTID
      ,PEOPLE.NAME
HAVING SUM (DONATION.AMOUNT) > 100

Что это означает:

- given the people who donated
- look only at data where donation date is in 2010 or later
- and within that data, show the people who donated a total of more than 100
0 голосов
/ 03 марта 2011

Вы не можете группировать по дате, если вы не хотите одну строку для каждого клиента на дату. Как насчет того, чтобы сделать это из таблицы пожертвований и просто найти имена клиентов?

выберите Донатора = (выберите имя из [люди], где [люди] .custid = [пожертвование] .custid), CustID, SUM (сумма) от [пожертвования] где [пожертвование] .дата между 01.01.2011 и 15.01.2011 группа по custid Сумма (сумма)> 100

0 голосов
/ 03 марта 2011

Измените свой первый запрос как:

,SUM (CASE WHEN DONATION.DATE > '1-1-2010' THEN DONATION.AMOUNT END) 
     as TOTAL_DONATION
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...