我有一张这样的表格,我想从中计算每个用户名的重复次数。我想算Type
多少不同的是那里Amount <> 0
每个用户:根据多个列中的条件计算不同的值
+----------+-------------+--------+
| Username | Type | Amount |
+----------+-------------+--------+
| abc | New | 1 |
| abc | New | 1 |
| abc | Old | 1 |
| def | New | 1 |
| def | Old | 0 |
| def | Refurbished | 1 |
| ijk | New | 1 |
| ijk | Old | 2 |
| ijk | Refurbished | 3 |
+----------+-------------+--------+
我的结果应该是这个样子:
+----------+---------------+
| Username | DistinctCount |
+----------+---------------+
| abc | 2 |
| def | 2 |
| ijk | 3 |
+----------+---------------+
..where [Username] abc
具有2 distinct [Type]
与[Amount] not equal to 0
。我试过SELECT DISTINCT Type, Username, SUM(CASE WHEN Amount <> 0 THEN 1 ELSE 0 END) FROM tblBase GROUP BY Type, Username
但它没有产生预期的结果。
谢谢!太棒了! – Shanka
这也是最糟糕的解决方案,不是吗?它效率低下,因为你正在考虑所有的行,即使是零。我敢打赌,这在大多数用例中会恶化...... –
@MattG,也许。但是这与使用'WHERE'条件的你和Backtrack的解决方案完全不同。如果他打算排除0行,那么WHERE条款是正确的,这是错误的。否则,这是唯一正确的解决方案。 –