2016-09-06 89 views
0

我在下面有下面的代码。我正在尝试合并基于日期的行。如何将这些结果合并成一行

SELECT 

TICKETS.TICKETID, 
RECEIPTS.DATENEW, 
TAXCATEGORIES.NAME = 'GCT' as GCT, 
TAXCATEGORIES.NAME = 'Tax 25%' as Tax25, 
TAXLINES.AMOUNT, 

SUM(TAXLINES.AMOUNT) AS TOTAL, 
SUM(CASE WHEN taxcategories.NAME = 'GCT' THEN taxlines.AMOUNT ELSE 0 END) AS GCTTOTAL, 
SUM(CASE WHEN taxcategories.NAME = 'Tax 25%' THEN taxlines.AMOUNT ELSE 0 END) AS TAX25TOTAL 

    FROM 
    RECEIPTS, 
    TAXLINES, 
    TAXES, 
    TAXCATEGORIES, 
    TICKETS, 
    PAYMENTS 

    WHERE 
    PAYMENTS.RECEIPT = RECEIPTS.ID 
    AND RECEIPTS.ID = TAXLINES.RECEIPT 
    AND RECEIPTS.ID = TICKETS.ID 
    AND TAXLINES.TAXID = TAXES.ID 
    AND TAXES.CATEGORY = TAXCATEGORIES.ID 
    AND DATENEW >= '2016-07-14 00:00:00' AND DATENEW <= '2016-07-14 23:00:00' 


GROUP BY gct, Tax25, CAST(RECEIPTS.DATENEW AS DATE) 

查询的结果是附着在下面的截图: enter image description here

现在我需要帮助合并那些具有相同的日期到一行行。我不确定我哪里出错,我尝试过一系列连接,但我会空白。

回答

1

看起来,具有相同日期的记录实际上在GCTTax25列中的值不同。如果您从GROUP BY子句中删除这些列,而将它们汇总在SELECT列表中,那么您将留下重复日期的单个记录。

请注意,在下面的查询中,我用ON子句中的联接条件替换了隐式联接(在FROM子句中使用逗号分隔的列表),并使用显式内部联接。这是现在编写查询的标准方式,它使他们更容易阅读。如果INNER JOIN过于严格,那么也许您打算使用LEFT JOIN来代替。

SELECT TICKETS.TICKETID, 
     RECEIPTS.DATENEW, 
     MAX(TAXCATEGORIES.NAME) = 'GCT' as GCT,   -- one value per date 
     MAX(TAXCATEGORIES.NAME) = 'Tax 25%' as Tax25, -- one value per date 
     TAXLINES.AMOUNT, 
     SUM(TAXLINES.AMOUNT) AS TOTAL, 
     SUM(CASE WHEN taxcategories.NAME = 'GCT' THEN taxlines.AMOUNT ELSE 0 END) AS GCTTOTAL, 
     SUM(CASE WHEN taxcategories.NAME = 'Tax 25%' THEN taxlines.AMOUNT ELSE 0 END) AS TAX25TOTAL 
FROM RECEIPTS 
INNER JOIN TAXLINES 
    ON RECEIPTS.ID = TAXLINES.RECEIPT 
INNER JOIN TAXES 
    ON TAXLINES.TAXID = TAXES.ID 
INNER JOIN TAXCATEGORIES 
    ON TAXES.CATEGORY = TAXCATEGORIES.ID 
INNER JOIN TICKETS 
    ON RECEIPTS.ID = TICKETS.ID 
INNER JOIN PAYMENTS 
    ON PAYMENTS.RECEIPT = RECEIPTS.ID 
WHERE DATENEW >= '2016-07-14 00:00:00' AND 
     DATENEW <= '2016-07-14 23:00:00' 
GROUP BY CAST(RECEIPTS.DATENEW AS DATE) 
+1

这绝对是完美的。谢谢你@ tim-biegeleisen –

+1

@RobertFarr很高兴帮助你。 –

相关问题