2010-10-15 66 views
1

我需要一些幫助,讓我的重複在我的輸出中多次顯示。幫助輸出重複

SELECT 
    accountNumber AS 'Member Number', 
    OD.orderdetails AS 'iNum', 
    FirstName AS 'First Name', 
    LastName AS 'Last Name', 
    HGP.email AS 'Email', 
    points AS 'Points -->', 
    '$' + CONVERT(varchar(50),(CONVERT(int,Points) * .1)) AS '<-- Amount', 
    CountryCode AS 'Country', 
    CONVERT(VARCHAR(10), issued, 101) AS 'Order Date', 
    CONVERT(VARCHAR(10), cs.RedeemedDate, 101) AS 'R Date' 
FROM tblHGP HGP, OrderDetails OD, tblInvoices i 
JOIN tblCS cs ON i.InvoiceNumber = cs.InvoiceNumber 
JOIN tblECI ac ON i.InvoiceNumber = ac.InvoiceNumber 
    AND cs.Sold = ac.ECIID 
WHERE 
    i.InvoiceNumber = HGP.invoiceNumber 
    AND HGP.issued BETWEEN '2010-01-01' AND '2010-09-01' 
    AND HGP.invoiceNumber = OD.orderdetails 
ORDER BY 
    HGP.issued 

就像我上面說的,我得到了一些用戶的重複。我試過截然不同的,但似乎沒有工作。

任何幫助將是偉大的! :o)

大衛

+1

我會通過刪除作爲連接的兩個WHERE子句並明確使用這兩個表(tblHGP和tblInvoices)的JOIN來清理此查詢。 – Bernard 2010-10-15 13:39:23

回答

1

像你只使用加入到訂單明細爲,這看起來對我說:

OD.orderdetails AS 'iNum', 

當你的WHERE子句中所示,可以從人類基因組計劃獲得此相同的值:

AND HGP.invoiceNumber = OD.orderdetails 

因此您可以將整個聯接消除到OD,並消除由於發票的詳細信息表中的多行而造成的重複。因此,改寫它應該是這樣的:

SELECT 
    accountNumber AS 'Member Number', 
    HGP.invoiceNumber AS 'iNum', 
    FirstName AS 'First Name', 
    LastName AS 'Last Name', 
    HGP.email AS 'Email', 
    points AS 'Points -->', 
    '$' + CONVERT(varchar(50),(CONVERT(int,Points) * .1)) AS '<-- Amount', 
    CountryCode AS 'Country', 
    CONVERT(VARCHAR(10), issued, 101) AS 'Order Date', 
    CONVERT(VARCHAR(10), cs.RedeemedDate, 101) AS 'R Date' 
FROM tblHGP HGP, tblInvoices i 
JOIN tblCS cs ON i.InvoiceNumber = cs.InvoiceNumber 
JOIN tblECI ac ON i.InvoiceNumber = ac.InvoiceNumber 
    AND cs.Sold = ac.ECIID 
WHERE 
    i.InvoiceNumber = HGP.invoiceNumber 
    AND HGP.issued BETWEEN '2010-01-01' AND '2010-09-01' 
ORDER BY 
    HGP.issued 

我不能肯定地告訴如果非表格合格列名(即發行點,COUNTRYCODE,名字,姓氏)從訂單明細或不來,儘管他們看起來不像。

+0

Theres在HGP中沒有列出invoiceNumber的列 – StealthRT 2010-10-15 15:00:33

+0

根據問題,請查看where子句:WHERE _i.InvoiceNumber = HGP.invoiceNumber_ AND HGP.issued BETWEEN'2010-01-01'AND'2010-09- 01' _AND HGP.invoiceNumber = OD.orderdetails_ – BlackICE 2010-10-15 15:20:18

+0

啊,是的。好吧,我改變了它,但我仍然得到相同的最終結果。 – StealthRT 2010-10-15 16:08:44

2

更多細節。從查詢中看,如果發票有多個訂單明細(多個訂購商品),您會看到雙倍數。這看起來像設計。自然dsictinct不會工作,因爲不是所有的領域將是相同的。

基本上,如果用戶在一張發票中爲兩件物品開具發票,他將出現(如發票一樣)兩次。

+0

感謝您的回覆,TomTom(ha)。您對於同一個人有不同的發票是正確的,但是無論如何都要將具有多個發票的相同指定用戶合併到每個發票中** ** – StealthRT 2010-10-15 13:57:57

+1

您必須刪除orderdetails連接,或者如果您需要查看orderdetail總數或總計爲他們添加一個組。 – BlackICE 2010-10-15 14:16:21