我有一个问题,我需要根据不同列的标准对美元进行分类汇总。例如,一个客户有多种分类方式,而在分类中,唯一重要的是HIT。如果一个客户至少有一行包含HIT,它应该总是被归类为HIT,即使该特定行没有(例如(第9行)。在我的数据集中可以看到,客户A的行中既有HIT,也有NONE,但由于客户A至少有一行是HIT,所以所有的美元都应该归类为HITS美元。由于其他客户都没有HIT类别,所以他们所有的美元都将进入NOT。
CLIENT DOLLARS CATEGORY
A 12434 HIT
B 212 NONE
C 21 NONE
D 1231 NONE
B 784 NONE
A 43577 HIT
D 64 NONE
A 123 NONE
D 12 NONE
A 53 NONE
A 10 NONE
我试图将其建立为一个CASE即 "HIT "类别。
SELECT CASE
WHEN category = 'HIT' THEN 'HITS'
WHEN category <> 'HIT' THEN 'NOT'
ELSE 'OTHER' END AS 'RESULT'
SUM(dollars) AS Dollars
FROM table 1
GROUP BY 'RESULT'
很明显,当客户A的类别为NONE时,这将不会为客户拿起HIT美元。任何帮助将是非常感激的。
谢谢!我有一个问题,我需要把它建立在CASE中,即:当类别为NONE时,这显然不能为客户A提取HIT美元。
你可以用一个子查询加入你的表,列出命中的客户。
select (case when (hits.client is null)
then 0
else 1
end) as hit,
sum(dollars) as Dollars
from t
left outer join ( select distinct client
from t
where category = 'HIT' ) hits
on t.client = hits.client
group by hit;
SQL fiddle: http:/sqlfiddle.com#! 98d403e70
你需要更多的信息。 我建议使用窗口函数。
SELECT (CASE WHEN is_hit = 1 THEN 'HITS'
ELSE 'NOT'
END) as result,
SUM(dollars) AS Sum_Dollars
FROM (SELECT dollars,
MAX(CASE WHEN category = 'HIT' THEN 1 ELSE 0 END) OVER (PARTITION BY client) as is_hit
FROM t
)
GROUP BY is_hit
SQL Fiddle: http:/sqlfiddle.com#!4403516。