使用可能没有严格标准化的表 1 ,如下所示:
ID S1 S2 S3 S4 S5 S6 S7 S8 S9
101 3 2 1 3 4 3 5 3 3
102 4 3 4 3 2 3 2 3 2
103 3 2 3 4 3 2 3 3 4
(S#列基本上是分数。)我需要返回符合以下两个条件之一的行:
(因此在样本数据中,第1行符合第一个标准,第2行符合第二个标准。第3行也不符合。)
问题在于我需要将其变为现有机制,这意味着没有SUM(CASE WHEN S1 = '2' OR S2 = '2'... THEN 1 ELSE 0 END)
,因为没有聚合/分组正在发生:这需要一个直接的条件我可以添加到现有的WHERE子句。
另一个问题是,这是在 SQL Server 2000 上,所以2008 +中可用的大多数花哨的shmancy添加都不是一个选项。
有没有办法做到这一点?
1 这被称为轻描淡写,伙计们。 :)子>
答案 0 :(得分:2)
一种方法是
SELECT
cust.customer_id, cust.customer_name, p.category,
count(distinct p.department_id) as total_departments,
count(*) as total_purchases
FROM customers cust
LEFT JOIN purchase_table p on (cust.customer_id = p.customer_id)
GROUP BY cust.customer_id, cust.customer_name, p.category
ORDER BY cust.customer_id;
或(在SQL Server 2000上未经测试)
WHERE 3 <=
CASE WHEN S1 = 2 THEN 1 ELSE 0 END +
CASE WHEN S2 = 2 THEN 1 ELSE 0 END +
CASE WHEN S3 = 2 THEN 1 ELSE 0 END +
CASE WHEN S4 = 2 THEN 1 ELSE 0 END +
CASE WHEN S5 = 2 THEN 1 ELSE 0 END +
CASE WHEN S6 = 2 THEN 1 ELSE 0 END +
CASE WHEN S7 = 2 THEN 1 ELSE 0 END +
CASE WHEN S8 = 2 THEN 1 ELSE 0 END +
CASE WHEN S9 = 2 THEN 1 ELSE 0 END