2017-01-23 5 views
2

ich eine Tabelle mit Werten wie dieses:TSQL - Finden Sie Kunden, die zwei Sätze Produkte gekauft

Customer Product# 
    A   1 
    A   3 
    A   5 
    A   7 
    A   11 
    A   13 
    B   5 
    B   11 
    B   13 
    C   4 
    C   5 
    C   6 
    C   11 
    C   14 
    C   42 
    C   60 

ich eine Abfrage möchte, die mir alle Kunden geben, die haben:

a. Either Product# 1 OR 5 
AND 
b. BOTH Product# 11 AND 13. 

Ich würde mich über jede Hilfe oder Vorschläge freuen.

Danke!

+2

Warum wird diese Frage so oft abgelehnt? Es ist eine interessante Frage, es ist eine knifflige Frage und eindeutig eine schwierige Frage für einen Anfänger. Waren Sie nicht alle zu einem bestimmten Zeitpunkt an diesem Punkt? –

+1

@LukasEder Ich würde raten, weil es keinen Lösungsversuch zeigt und es könnte ein Beitrag sein, der nach einer schnellen Antwort auf eine Hausaufgabenfrage sucht. – dfundako

+1

@dfundako: Wirklich? Na und? [Agh] (https://www.youtube.com/watch?v=Q37xJtuQ24w) :) Noch eine interessante Frage, die mich zum Nachdenken brachte ... –

Antwort

4

Try this:

select customer 
from your_table 
group by customer 
having count(distinct case 
      when product# in (11, 13) 
       then product# 
      end) = 2 
    and count(case 
      when product# in (1, 5) 
       then 1 
      end) > 0 

durch Kundengruppierung, wenn beide vorhanden sind 11 und 13 zu finden, verwenden Sie bedingte Aggregation und in ähnlicher Weise, ob es atleast eine Zeile mit 1 oder 5 für die Kunden ist.

0

"HAVING" funktioniert, aber Sie könnten dies auch mit ein paar Subselects tun - länger und weniger effizient, aber leichter zu dokumentieren und/oder mit komplexeren Ausgaben zu verwenden.

SELECT DISTINCT 
    a.customer 
FROM 
    your_table AS a 
WHERE 
    a.customer IN (SELECT customer FROM your_table WHERE product# IN (1,5)) 
    AND a.customer IN (SELECT customer FROM your_table WHERE product# = 11) 
    AND a.customer IN (SELECT customer FROM your_table WHERE product# = 11) 
+0

Danke @Franz Stoneking! Definitiv einfacher zu lesen. Bin dankbar! – Talay

Verwandte Themen