Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
martyn
Starting Member
9 Posts |
Posted - 2006-12-07 : 13:17:03
|
I'm trying to write a query that does the followingI want a resultset of customers who bought one product but have not bought another productMy table isInvoiceNumber, Productcode, customernumber, price and quantityso for each invoice I get multiple rows in the table (One for each product)I'm going round in circles where to startThanks in advanceMartyn |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-12-07 : 14:13:01
|
Very good that your data is normalized. Try thisSELECT t1.*FROM <YourTableNameHere> t1WHERE t1.ProductCode IN (<ValidProductCodesHere>) AND t1.CustomerNumber NOT IN (SELECT t2.CustomerNumber FROM <YourTableNameHere> t2 WHERE t2.ProductCode IN (<InvalidProductCodesHere>)) Peter LarssonHelsingborg, Sweden |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-12-07 : 14:15:31
|
[code]SELECT t.*FROM <YourTableNameHere> tLEFT JOIN ( SELECT CustomerNumber FROM <YourTableNameHere> WHERE ProductCode IN (<InvalidProductCodesHere>) ) x ON x.CustomerNumber = t.CustomerNumberWHERE t.ProductCode IN (<ValidProductCodesHere>) AND x.CustomerNumber IS NULL[/code]Peter LarssonHelsingborg, Sweden |
 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2006-12-07 : 14:25:48
|
Or, if you want only the CustomerNumbers,SELECT DISTINCT t1.CustomerNumberFROM <YourTableNameHere> t1...orSELECT DISTINCT t.CustomerNumberFROM <YourTableNameHere> t...Peter LarssonHelsingborg, Sweden |
 |
|
Page47
Master Smack Fu Yak Hacker
2878 Posts |
Posted - 2006-12-07 : 14:46:13
|
I don't like NOT INSELECT t1.*FROM <YourTableNameHere> t1WHERE t1.ProductCode IN (<ValidProductCodesHere>) AND not exists ( select 1 from <YourTableNameHere> t2 where t1.CustomerNumber = t2.CustomerNumber and t2.ProductCode in (<InvalidProductCodesHere>))Jayto here knows when |
 |
|
martyn
Starting Member
9 Posts |
Posted - 2006-12-08 : 04:35:29
|
Absolutly brillent - both ways work greatThank you very muchMartyn |
 |
|
|
|
|