How to do logic OR AND NOT across rows in SQL
Scenario
You have a normalized table that has values in rows. Let's take an example that has a history table with an approved flag:
Date Approved DollarValue Customer
1/1/2008 Y 13.5 A
2/1/2008 N 12 A
3/1/2008 Y 14 A
1/1/2008 Y 11.5 B
2/1/2008 Y 9 B
3/1/2008 Y 17 B
1/1/2008 Y 13.5 C
2/1/2008 Y 29 C
3/1/2008 Y 18 C
You want to find know if all the customers with all 3 monthly values approved and the values are < 20. Now I know you can get at this result multiple ways but I just want to show how you can apply logic across rows.
First you know that there are 3 monthly records for all the months data and you are also looking for an approved.
SELECT DISTINCT Customer
FROM MyTable
WHERE Approved = 'Y' AND DollarValue < 20
GROUP BY Customer
HAVING COUNT(Customer) = 3
You should see an output with only Customer B.
Similar techniques can be applied for OR and NOT.