2016-02-08 41 views
0

背景:我需要修改此查詢以僅輸出不平衡爲零的發票號碼(可能爲+/-)。我還需要輸出將所有項目包括在不平衡爲零的發票號碼(無分組)中。使用條件彙總過濾查詢而不分組

因此,如果發票餘額,從輸出抑制它。

查詢:

SELECT  invoices.account, invoices.invoice_no, transact.item, transact.date_time, transact.operator, transact.salespoint, transact.extension 
FROM   transact INNER JOIN 
        invoices ON transact.invoice_no = invoices.invoice_no 
WHERE  (invoices.account = '*GUESTS*') AND (transact.extension <> 0)) 
ORDER BY invoices.invoice_no DESC 

輸出:

account invoice_no item date_time operator salespoint extension 
Test 1 **TRANS** 1/0/00 12:25 AM SUNNY RTL2  $(2.69) 
Test 1 BT_DIET  1/0/00 12:25 AM SUNNY RTL2  $2.69 
Test 2 **TRANS** 1/0/00 12:08 AM SUNNY RTL2  $(14.55) 
Test 2 **TRANS** 1/0/00 12:08 AM SUNNY RTL2  $(1.00) 
Test 2 QUICHE  1/0/00 12:08 AM SUNNY RTL2  $7.01 
Test 2 FRUITSALAD 1/0/00 12:08 AM SUNNY RTL2  $7.54 
Test 2 **TIPS** 1/0/00 12:08 AM SUNNY RTL2  $1.00 
Test 3 **TRANS** 1/0/00 12:07 AM SUNNY RTL2  $(40.67) 
Test 3 BURRITO  1/0/00 12:07 AM SUNNY RTL2  $16.17 
Test 3 ENGMUFFSAU 1/0/00 12:07 AM SUNNY RTL2  $7.54 
Test 3 DANISH  1/0/00 12:07 AM SUNNY RTL2  $4.30 
Test 3 SUMPLYJUIC 1/0/00 12:07 AM SUNNY RTL2  $6.47 
Test 3 SUMPLYJUIC 1/0/00 12:07 AM SUNNY RTL2  $3.23 
Test 3 COFFEE_CUP 1/0/00 12:07 AM SUNNY RTL2  $2.96 
Test 4 QUICHE  1/0/00 12:01 AM SUNNY RTL2  $7.01 
Test 4 DANISH  1/0/00 12:07 AM SUNNY RTL2  $4.30 

所需的輸出:

account invoice_no item date_time operator salespoint extension 
Test 4 QUICHE  1/0/00 12:01 AM SUNNY RTL2  $7.01 
Test 4 DANISH  1/0/00 12:07 AM SUNNY RTL2  $4.30 

問候, DH

回答

0
;WITH list AS (
    SELECT  invoices.account, invoices.invoice_no, transact.item, transact.date_time, transact.operator, transact.salespoint, transact.extension 
    , SUM(transact.salespoint) OVER (PARTITION BY transact.item ORDER BY transact.item) AS Total 
    FROM   transact INNER JOIN 
       invoices ON transact.invoice_no = invoices.invoice_no 
    WHERE  (invoices.account = '*GUESTS*') AND (transact.extension <> 0) 
) 
SELECT * 
FROM list 
WHERE Total > 0 
ORDER BY invoice_no DESC 
+0

收到此錯誤:消息102,級別15,狀態1,行3 附近有語法錯誤 '秩序'。 –

+0

SQL Server 08不支持ORDER BY表達式。改變了這一點,並糾正了一些領域。作爲:; WITH列表AS( SELECT invoices.account,invoices.invoice_no,transact.item,transact.date_time,transact.operator,transact.salespoint,transact.extension, \t \t SUM(transact.extension)OVER(PARTITION BY invoices.invoice_no)AS總 FROM辦理INNER JOIN 發票ON transact.invoice_no = invoices.invoice_no WHERE(invoices.account = '*人*')AND(transact.extension <> 0) ) SELECT * FROM list WHERE Total <> 0 ORDER BY invoice_no DESC –

+0

@DanielHudson,我很高興它有幫助。 – FLICKER

0

我會用窗/解析函數如果這是一個選項。然後,你可以分兩步處理這個:

  • 在另一個查詢添加一列像sum(extension) over (partition by invoice_no) as invoice_balance
  • 包住整個查詢過濾where invoice_balance <> 0
0

的問題是,擴展是不是數字。您需要編寫一個存儲的函數,將擴展的任何值正確轉換爲數字值。您還需要group by,因爲金額爲0是一個彙總期限。所以,你需要這樣的:

SELECT  account, invoice_no, item, date_time, operator, salespoint, extension 
FROM   transact INNER JOIN 
        invoices ON transact.invoice_no = invoices.invoice_no 
group by invoices.account, invoices.invoice_no, transact.item, transact_date_time, transact.operator, transact.salespoint, myfunction(transact.extension) as extension 
having  (account = '*GUESTS*') AND (sum(extension) <> 0)) 
ORDER BY invoice_no DESC 
+0

收到此錯誤:Msg 195,Level 15,State 10,Line 4 'myfunction'不是公認的內置函數名稱。 –

+0

@DanielHudson,myfunction表示您應該實現的存儲函數,它將擴展轉換爲數值,因爲它不是數字,因爲它包含$符號和paranthesis。 「問題在於擴展名不是數字,你需要編寫一個存儲函數,將擴展名中的任何值正確轉換爲數字值。」 –