【发布时间】:2011-06-19 09:34:46
【问题描述】:
我已经过度简化了以下示例,但请注意,我确实需要我所描述的结果。
我有一个表格,其中包含有关客户的信息,包括他们是如何被推荐的。
例如MyTable(编辑:我的过度简化导致答案不起作用。它们是很好的答案,但不能解决我的问题。为了清楚起见,我添加了最后一块拼图):
STORE CUS_ID REFERRED MONEYMADE
1 11 RADIO 10.00
1 15 WALKIN 20.00
1 11 RADIO 30.00
2 12 RADIO 40.00
2 12 RADIO 50.00
3 13 WALKIN 60.00
3 14 WALKIN 70.00
我想统计按特定类型推荐的 DISTINCT 客户的数量,并按商店对他们进行分组。我可以做到以下几点:
SELECT
STORE, COUNT(DISTINCT CUS_ID) AS COUNTEM,
REFERRED, SUM(MONEYMADE)
FROM MyTable
GROUP BY REFERRED, STORE
这给出了以下结果:
STORE COUNTEM REFERRED MONEYMADE
1 1 RADIO 40.00
1 1 WALKIN 20.00
2 1 RADIO 90.00
3 2 WALKIN 130.00
但是,我真的需要这样的结果:
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 1 40.00 1 20.00
2 1 90.00 0 0.00
3 0 0.00 2 130.00
我尝试使用 SUM 和 CASE 进行查询,但它计算了重复项。例如:
SELECT
STORE,
SUM (CASE REFERRED WHEN 'RADIO' THEN 1 ELSE 0 END) AS RADIO,
SUM (CASE REFERRED WHEN 'RADIO' THEN MONEYMADE ELSE 0 END) AS RADIO_MONEY,
SUM (CASE REFERRED WHEN 'WALKIN' THEN 1 ELSE 0 END) AS WALKIN
SUM (CASE REFERRED WHEN 'WALKIN' THEN MONEYMADE ELSE 0 END) AS WALKIN_MONEY,
FROM MyTable
GROUP BY STORE
返回这个不正确的结果:
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 2 40.00 1 20.00
2 2 90.00 0 0.00
3 0 0.00 2 130.00
有没有办法解决这个问题?我已经搜索了“count if”类型的函数,但我唯一找到的是 sum - case 方法。
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql pivot