2014-01-28 36 views
0

我不是一個真正的程序員,我試圖按照給定年份按月對報價,採購訂單和發票進行求和。我遇到的一些問題(試圖專門使用查詢嚮導)已經鏈接上面列出的3個類別發生的日期。例如從同一個錶鏈接的SQL查詢

InvoiceCost|InvoiceDate|QuoteCost|QuoteDate|POCost|PODate 
$$$  | Date  | $$$ | Date | $$$ | Date 
$$$  | Date  | $$$ | Date | $$$ | Date 

(希望工程) 我想從這樣一個表來獲取是總結的類別和每月對其進行排序的查詢。我已經得到的是行日期列出的所有獨特的組合與各自類別的款項通過 -

SELECT DISTINCTROW Format$([Table].[invoiceDate],'mmmm yyyy') AS [invoiceDate By Month], 
        Format$([Table].[PODate],'mmmm yyyy') AS [PODate By Month], 
        Format$([Table].[quoteDate],'mmmm yyyy') AS [quoteDate By Month], 
        Sum(Table.invoiceCost) AS [Sum Of invoiceCost], 
        Sum(Table.POCost) AS [Sum Of POCost], 
        Sum(Table.quoteCost) AS [Sum Of quoteCost] 
FROM Table 
GROUP BY Format$([Table].[invoiceDate],'mmmm yyyy'), 
     Format$([Table].[PODate],'mmmm yyyy'), 
     Format$([Table].[quoteDate],'mmmm yyyy'), 
     Year([Table].[invoiceDate])*12+DatePart('m',[Table].[invoiceDate])-1,  
     Year([Table].[PODate])*12+DatePart('m',[Table].[PODate])-1, 
     Year([Table].[quoteDate])*12+DatePart('m',[Table].[quoteDate])-1; 

我想知道一些SQL「神奇」,將表內鏈接的日期列,以避免獨特的日期組合。

編輯

更具體地講,

<style type="text/css"> 
    table.tableizer-table { 
    border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif 
    font-size: 12px;} 
.tableizer-table td { 
    padding: 4px; 
    margin: 3px; 
    border: 1px solid #ccc;} 
.tableizer-table th { 
    background-color: #104E8B; 
    color: #FFF; 
    font-weight: bold;} 
</style><table class="tableizer-table"> 
<tr class="tableizer-firstrow"><th>invoiceDate</th><th>QuoteDate</th><th>PODate</th><th>sumInvoice</th><th>sumQuote</th><th>sumPO</th></tr> 
<tr><td>&nbsp;</td><td>17-Jul-13</td><td>01-Jul-13</td><td>$0.00</td><td>$0.00</td><td>$0.00</td></tr> 
<tr><td>30-Jul-13</td><td>01-Jan-14</td><td>31-Mar-14</td><td>$100.00</td><td>$10.00</td><td>$48.00</td></tr> 
<tr><td>30-Dec-13</td><td>01-Feb-14</td><td>10-Jan-14</td><td>$615.00</td><td>$50.00</td><td>$23.00</td></tr> 
<tr><td>03-Jan-14</td><td>01-Jan-14</td><td>16-Mar-14</td><td>$3.00</td><td>$100.00</td><td>$615.00</td></tr> 
<tr><td>16-Jan-14</td><td>01-Jan-14</td><td>20-Feb-14</td><td>$65.00</td><td>$50.00</td><td>$156.00</td></tr> 
<tr><td>03-Mar-14</td><td>24-Jan-14</td><td>24-Feb-14</td><td>$0.00</td><td>$200.00</td><td>$0.00</td></tr> 
<tr><td>11-Mar-14</td><td>18-Dec-13</td><td>21-Feb-14</td><td>$3,500.00</td><td>$5,000.00</td><td>$4,000.00</td></tr> 
<tr><td>13-Mar-14</td><td>01-Jan-14</td><td>11-Dec-13</td><td>$15.00</td><td>$1,000.00</td><td>$231.00</td></tr> 
<tr><td>15-Mar-14</td><td>30-Jan-14</td><td>19-Feb-14</td><td>$10.00</td><td>$8,000.00</td><td>$20.00</td></tr> 
<tr><td>20-Mar-14</td><td>09-Jan-14</td><td>14-Feb-14</td><td>$1,000.00</td><td>$200.00</td><td>$20,000.00</td></tr> 
<tr><td>21-Mar-14</td><td>01-Mar-14</td><td>20-Feb-14</td><td>$15.00</td><td>$10,000.00</td><td>$45.00</td></tr> 
</table> 

注意行中的日期作出的組合。我希望看到的是這樣的事情

invoiceD|POD |quoteD |SumOfinvoiceCost|SumOfPOCost|SumOfquoteCost 
1-2014 |1-2014 |1-2014 |$68.00   |$23.00  |$9,560.00 
12-2013 |12-2013|12-2013|$615.00   |$231.00 |$5,000.00 
3-2014 |3-2014 |3-2014 |$4,540.00  |$663.00 |$10,000.00 
7-2013 |7-2013 |7-2013 |$100.00   |$0.00  |$0.00 

我已經能夠得到這個通過使4個總查詢工作(3使按月和日期聯繫在一起的第四單獨類別的資金。) SQL是否可以在一個查詢中完成所有這些操作,或者我應該只是在訪問中創建3個獨立的表來存儲類別之間的類別?

讓我知道是否需要更多信息。 感謝

+0

quel SQL?微軟的「版本」? – wildplasser

+0

請提供樣本數據和期望的結果。 –

+0

你正在使用哪個dbms? MySQL的? SQLServer的? PostgreSQL的? – carexcer

回答

0

我想知道一些SQL「神奇」,將鏈接日期列 表內,以避免獨特的日期組合。

要通過日期避免獨特的日期組合被全部列得到的款項,你不能組,必須按只:

SELECT invoiceDate, QuoteDate, PODate, month(invoiceDate) as month, 
     sum(invoiceCost) as sumInvoice, 
     sum(QuoteCost) as sumQuote, 
     sum(SOCost) as sumSO 
FROM Table 
GROUP BY invoiceDate, QuoteDate, PODate, month(invoiceDate) as month 

你不需要在SELECT一個DISTINCT條款。

要按月太集團,你必須包括selectgroup by條款,場,但如果你有沒有現場month,嘗試的日期字段中的一個使用month()功能,它具有所有月份的值是可能會出現。

+0

運行此代碼給了我類似的結果,雖然SQL更加整潔。結果仍然沒有將給定月份的所有類別相加並留下唯一的日期組合總和。 –

+0

當你說「類別」時,你指的是什麼?也許我還沒有理解你的問題。此外,你想要一個月的總和()嗎?請更好地解釋它 – carexcer

+0

類別在報價,採購和發票和所有月份的金額是理想的。 –

0

我想你想要的是這樣的:

SELECT Format$(thedate,'mmmm yyyy') as MMMYYYY, 
     Sum(invoiceCost) AS [Sum Of invoiceCost], 
     Sum(POCost) AS [Sum Of POCost], 
     Sum(quoteCost) AS [Sum Of quoteCost] 
FROM ((select invoiceDate as thedate, invoiceCost, NULL as POCost, NULL as quoteCost 
     from Table 
     ) union all 
     (select PODate as thedate, NULL as InvoiceCost, POCost, NULL as quoteCost 
     from Table 
     ) union all 
     (select QuoteDate as thedate, NULL as InvoiceCost, Null as POCost, NULL as quoteCost 
     from Table 
     ) 
    ) as t 
GROUP BY Format$(thedate, 'mmmm yyyy') 
ORDER BY min(thedate); 

編輯:

訪問可能不允許允許的子查詢子查詢。您還可以通過左外連接來完成此操作,如果您有一個月的列表,則可以使用。所以,如果我假設所有月份都有發票,那麼你可以這樣做:

SELECT i.MMMYYYY, 
     i.invoiceCost AS [Sum Of invoiceCost], 
     p.POCost AS [Sum Of POCost], 
     q.quoteCost AS [Sum Of quoteCost] 
FROM ((select Format$(invoiceDate, 'mmm yyyy') as mmmyyyy, sum(InvoiceCost) as InvoiceCost 
     from Table t 
     group by Format$(invoiceDate, 'mmm yyyy') 
    ) i left join 
     (select Format$(PODate, 'mmm yyyy') as mmmyyyy, sum(POCost) as POCost 
     from Table t 
     group by Format$(PODate, 'mmm yyyy') 
    ) p 
     on i.mmmyyyy = p.mmmyyyy 
    ) left join 
    (select Format$(QuoteDate, 'mmm yyyy') as mmmyyyy, sum(QuoteCost) as quoteCost 
     from Table t 
     group by Format$(QuoteDate, 'mmm yyyy') 
    ) q 
    on i.mmmyyyy = q.mmmyyyy 
+0

運行此代碼時,第一個「union all」突出顯示,我收到「JOIN操作中的語法錯誤」。 –

+0

運行此代碼現在給出「FROM子句中的語法錯誤」沒有突出顯示 –

+0

@ SneakyPanda40。 。 。在'from'子句之一中有't。*'的拼寫錯誤。 –