SQL "GROUP BY" несколько строк, игнорируя одну - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь суммировать несколько значений скидок (в клиентах csv экспорта), если сегодняшняя дата находится между FROMDATE и EXPIRYDATE.

Если я суммирую значения скидок, все в порядке, но если я попрошу проверить, находится ли сегодня значение между FROMDATE и EXPIRYDATE, это заставит меня добавить «FROMDATE and EXPIRYDATE» в GROUP BY, и это приведет к дублированию строк и СУММА не работает.

Вот код, я подписал проблемные части с **

Я очень ценю вашу помощь!

SELECT
CUSTOMERS.CUSTNAME AS 'ERP Code',
CUSTOMERS.CUSTDES AS 'Name',
CUSTOMERS.PHONE AS 'Phone',
(SELECT TOP 1 PHONEBOOK.CELLPHONE FROM PHONEBOOK WHERE 
CUSTOMERS.CUST=PHONEBOOK.CUST) AS 'Mobile',
(SELECT TOP 1 PHONEBOOK.NAME FROM PHONEBOOK WHERE CUSTOMERS.CUST=PHONEBOOK.CUST) AS 'Prop1 Contact Name',
CUSTOMERS.FAX AS 'Fax',
CUSTOMERS.ADDRESS AS 'Address',
CUSTOMERS.STATE AS 'City',
CUSTOMERS.ZIP AS 'ZIP Code',
CUSTOMERS.VATNUM + CUSTOMERS.WTAXNUM  AS 'Goverment ID',
CUSTOMERSA.EMAIL AS 'Email',
**(SELECT SUM (DISCOUNTS.T$PERCENT) WHERE GETDATE() BETWEEN zoom#system.dbo.tabula_dateconvert(DISCOUNTS.FROMDATE) AND zoom#system.dbo.tabula_dateconvert(DISCOUNTS.EXPIRYDATE)) AS 'Discount',**
ISNULL(CUSTPLIST.PLIST, -1) AS 'Price Level Code',
(SELECT (PAY.PAYDES) FROM PAY WHERE CUSTOMERS.PAY=PAY.PAY) AS 'Prop2'

FROM CUSTOMERS
LEFT OUTER JOIN CUSTOMERSA
ON CUSTOMERS.CUST=CUSTOMERSA.CUST
LEFT OUTER JOIN CUSTDISCOUNT
ON CUSTOMERS.CUST=CUSTDISCOUNT.CUST
LEFT OUTER JOIN DISCOUNTS
ON CUSTDISCOUNT.DISCOUNT=DISCOUNTS.DISCOUNT
LEFT OUTER JOIN CUSTPLIST
ON CUSTOMERS.CUST=CUSTPLIST.CUST
LEFT OUTER JOIN  CUSTSTATS
ON CUSTOMERS.CUSTSTAT=CUSTSTATS.CUSTSTAT

WHERE  CUSTOMERS.CUST > 0
and CUSTOMERS.CUSTSTAT between -4 and -2

GROUP BY CUSTOMERS.CUSTNAME,CUSTOMERS.CUSTDES,CUSTOMERS.PHONE,CUSTOMERS.CUST,CUSTOMERS.FAX,CUSTOMERS.ADDRESS,CUSTOMERS.STATE,CUSTOMERS.ZIP,CUSTOMERS.VATNUM,CUSTOMERS.WTAXNUM,CUSTOMERSA.EMAIL,CUSTPLIST.PLIST,CUSTOMERS.PAY,**FROMDATE,EXPIRYDATE**

ORDER BY Name;

1 Ответ

0 голосов
/ 28 июня 2018

Не уверен, но, возможно, CTE поможет здесь, попробуйте это:

WITH CTE AS 
(
    SELECT CUSTOMERS.CUSTNAME AS 'ERP Code',
           CUSTOMERS.CUSTDES AS 'Name',
           CUSTOMERS.PHONE AS 'Phone',
           (SELECT TOP 1 PHONEBOOK.CELLPHONE FROM PHONEBOOK WHERE 
           CUSTOMERS.CUST=PHONEBOOK.CUST) AS 'Mobile',
           (SELECT TOP 1 PHONEBOOK.NAME FROM PHONEBOOK WHERE 
           CUSTOMERS.CUST=PHONEBOOK.CUST) AS 'Prop1 Contact Name',
           CUSTOMERS.FAX AS 'Fax',
           CUSTOMERS.ADDRESS AS 'Address',
           CUSTOMERS.STATE AS 'City',
           CUSTOMERS.ZIP AS 'ZIP Code',
           CUSTOMERS.VATNUM + CUSTOMERS.WTAXNUM  AS 'Goverment ID',
           CUSTOMERSA.EMAIL AS 'Email',
           **(SELECT SUM (DISCOUNTS.T$PERCENT) WHERE GETDATE() BETWEEN 
           zoom#system.dbo.tabula_dateconvert(DISCOUNTS.FROMDATE) AND 
           zoom#system.dbo.tabula_dateconvert(DISCOUNTS.EXPIRYDATE)) AS 'Discount',**
           ISNULL(CUSTPLIST.PLIST, -1) AS 'Price Level Code',
           (SELECT (PAY.PAYDES) FROM PAY WHERE CUSTOMERS.PAY=PAY.PAY) AS 'Prop2'

           FROM CUSTOMERS
           LEFT OUTER JOIN CUSTOMERSA
           ON CUSTOMERS.CUST=CUSTOMERSA.CUST
           LEFT OUTER JOIN CUSTDISCOUNT
           ON CUSTOMERS.CUST=CUSTDISCOUNT.CUST
           LEFT OUTER JOIN DISCOUNTS
           ON CUSTDISCOUNT.DISCOUNT=DISCOUNTS.DISCOUNT
           LEFT OUTER JOIN CUSTPLIST
           ON CUSTOMERS.CUST=CUSTPLIST.CUST
           LEFT OUTER JOIN  CUSTSTATS
           ON CUSTOMERS.CUSTSTAT=CUSTSTATS.CUSTSTAT

         GROUP BY CUSTOMERS.CUSTNAME, CUSTOMERS.CUSTDES, CUSTOMERS.PHONE, 
                  CUSTOMERS.CUST, CUSTOMERS.FAX, CUSTOMERS.ADDRESS, CUSTOMERS.STATE, 
                  CUSTOMERS.ZIP, CUSTOMERS.VATNUM, CUSTOMERS.WTAXNUM, 
                  CUSTOMERSA.EMAIL, CUSTPLIST.PLIST, CUSTOMERS.PAY
)

SELECT * FROM CTE WHERE CUSTOMERS.CUST > 0
and CUSTOMERS.CUSTSTAT between -4 and -2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...