2016-05-12 58 views
0

有人可以幫助我處理其餘的查詢。當客戶在同一天購買東西時返回行

此查詢從我公司的所有銷售中爲我提供客戶,AdressNr,日期,員工,文章,活動號 。

SELECT ad.Name + ' ' + ad.Vorname AS Customer, 
pa.Kunde AS CustomerNr, 
CONVERT(VARCHAR(10),p.datum,126) AS Date, 
(SELECT a.name + ' ' + a.Vorname AS Name FROM PRO_Mitarbeiter m LEFT JOIN ADR_Adressen a ON a.AdressNrADR=m.AdressNrADR WHERE m.MitNrPRO = l.MitNrPRO) as Employee, 
p.Artikel_1 AS Article, 
l.AufgabenNrCRM AS OrderNr 
FROM ZUS_Therapie_Positionen p 
INNER JOIN CRM_AufgabenLink l ON l.AufgabenNrCRM = p.Id_Aktivitaet 
INNER JOIN CRM_Aufgaben ab ON ab.AufgabenNrCRM = p.Id_Aktivitaet 
INNER JOIN PRO_Auftraege pa ON pa.AuftragNrPRO = ab.AuftragNrPRO 
INNER JOIN ADR_Adressen ad ON ad.AdressNrADR = pa.Kunde 
INNER JOIN ADR_GruppenLink gl ON gl.AdressNrADR = ad.AdressNrADR 
INNER JOIN ADR_Gruppen g ON g.GruppeADR = gl.GruppeADR 
WHERE l.MitNrPRO != 0 
GROUP BY l.AufgabenNrCRM,ad.Name,ad.Vorname,pa.Kunde,p.datum,p.Artikel_1,l.MitNrPRO 
ORDER BY pa.Kunde,p.datum,l.AufgabenNrCRM 

我的目標是過濾這個,所以我得到的只是行回到凡客買了那麼多東西1在同一天。如果客戶在同一天購買同一文章兩次,這並不重要。我也想看到這一點。

要爲你寫一些SQL小提琴很複雜,但在這張圖中你可以看到我的目標是什麼。我想用左邊的X取走所有的行,然後用我想要保留的圓圈放了。

enter image description here

+0

請提供上面的查詢結果和您想要得到的結果。 – Alex

+1

可能重複的[SQL查詢找到記錄where count> 1](http://stackoverflow.com/questions/7151401/sql-query-for-finding-records-where-count-1) –

+0

1)你有一個'GROUP BY',但沒有聚合函數;或者你真的想要'DISTINCT'(如果你有多個相同的行,或者行已經是唯一的,並且你不需要它)2)當子句超過〜3列時,尤其是從單獨的表格中,你可能想要嘗試其他方法,如預先彙總一個或多個表格。 –

回答

0

由於我不會說德語,我不會特別針對給你的SQL。但請參閱以下類似示例的準代碼,以便您可以將其應用於自己的腳本。

SELECT C.CustomerName, O.OrderDate, O.OrderNumber 
FROM CUSTOMER C 
JOIN ORDERS O ON O.Customer_ID = C.Customer_ID 
JOIN 
    (SELECT Customer_ID, OrderDate 
    FROM ORDERS 
    GROUP BY Customer_ID, OrderDate 
    HAVING COUNT(*) > 1) SRC 
     ON SRC.Customer_ID = O.Customer_ID AND SRC.OrderDate = O.OrderDate 

在上面的腳本,最後查詢(子查詢)將只返回結果,其中一個客戶曾在某一天超過一個數量級。通過將它加入到主查詢中,您可以有效地生成OP中詢問的結果。

編輯1: 關於下面的評論,我真的建議只是在看你的數據模型,試圖瞭解這裏發生了什麼,以及它自己的固定。但是,通過使用上面的自己的腳本,有一個簡單的,但幾乎不是最佳的解決方案。請注意,雖然這並非災難性的表現,但它顯然不是最乾淨,最有效的方法。但它應該工作:

;WITH CTE AS (SELECT ad.Name + ' ' + ad.Vorname AS Customer, 
    pa.Kunde AS CustomerNr, 
    CONVERT(VARCHAR(10),p.datum,126) AS [Date], 
    (SELECT a.name + ' ' + a.Vorname AS Name FROM PRO_Mitarbeiter m LEFT JOIN ADR_Adressen a ON a.AdressNrADR=m.AdressNrADR WHERE m.MitNrPRO = l.MitNrPRO) as Employee, 
    p.Artikel_1 AS Article, 
    l.AufgabenNrCRM AS OrderNr 
    FROM ZUS_Therapie_Positionen p 
    INNER JOIN CRM_AufgabenLink l ON l.AufgabenNrCRM = p.Id_Aktivitaet 
    INNER JOIN CRM_Aufgaben ab ON ab.AufgabenNrCRM = p.Id_Aktivitaet 
    INNER JOIN PRO_Auftraege pa ON pa.AuftragNrPRO = ab.AuftragNrPRO 
    INNER JOIN ADR_Adressen ad ON ad.AdressNrADR = pa.Kunde 
    INNER JOIN ADR_GruppenLink gl ON gl.AdressNrADR = ad.AdressNrADR 
    INNER JOIN ADR_Gruppen g ON g.GruppeADR = gl.GruppeADR 
    WHERE l.MitNrPRO != 0 
    GROUP BY l.AufgabenNrCRM,ad.Name,ad.Vorname,pa.Kunde,p.datum,p.Artikel_1,l.MitNrPRO 
    ORDER BY pa.Kunde,p.datum,l.AufgabenNrCRM) 
SELECT C.* 
FROM CTE C 
JOIN (Select CustomerNr, [Date] 
    FROM CTE B 
    GROUP BY CustomerNr, [Date] 
    HAVING COUNT(*) > 1) SRC 
     ON SRC.CustomerNr = C.CustomerNr AND SRC.[Date] = C.[Date] 

這應該直接工作。但正如我所說,這是一個醜陋的解決方法,我們基本上都是隻提取整個集合兩次,而不是僅僅將子查詢限制在最少的必要表中。你的選擇。 :)

+0

感謝您的幫助。我的問題是,我的查詢包含很多聯接,還有一些聲明和我不知道我是否必須使用所有聯接以及兩個地方的聲明? – user2210516

+0

我現在試過,它根本不起作用:(它給我所有的結果無論如何 – user2210516

+0

檢查我的文章的編輯部分的解決方法,應該直接工作。這是醜陋的,但它應該完成工作。仍然建議做更多的功課來優化查詢以僅使用必要的數據。:) – Kahn

0

試過,也沒有工作。我也做了一個新的查詢,試圖保持它儘可能簡單,它也不工作。它仍然給我單值返回..

SELECT p.Datum,a.AufgabenNrCRM,auf.Kunde FROM CRM_Aufgaben a 
LEFT JOIN ZUS_Therapie_Positionen p ON p.Id_Aktivitaet = a.AufgabenNrCRM 
LEFT JOIN PRO_Auftraege auf ON auf.AuftragNrPRO = a.AuftragNrPRO 
     LEFT JOIN 
     (SELECT pa.Datum,au.Kunde FROM CRM_Aufgaben aa 
     LEFT JOIN ZUS_Therapie_Positionen pa ON pa.Id_Aktivitaet = aa.AufgabenNrCRM 
     LEFT JOIN PRO_Auftraege au ON au.AuftragNrPRO = aa.AuftragNrPRO 
     GROUP BY pa.Datum,au.Kunde 
     HAVING COUNT(*) > 1) SRC 
ON SRC.Kunde = auf.Kunde 
WHERE p.datum IS NOT NULL 
GROUP BY p.Datum,a.AufgabenNrCRM,auf.Kunde 
ORDER BY auf.Kunde,p.Datum 
相關問題