Tsql 分组依据,但包含“缺少”值
假设我有以下内容Tsql 分组依据,但包含“缺少”值,tsql,sql-server-2000,Tsql,Sql Server 2000,假设我有以下内容 select case when fcompany = 'Acme' then 'Red' when fcompany = 'Acme Rockets' then 'Blue' else 'Green' end Color ,sum(fann_sales) FROM slcdpm group by case when fcompany = 'Acme' then 'Red' when fcompany = 'Acm
select
case
when fcompany = 'Acme' then 'Red'
when fcompany = 'Acme Rockets' then 'Blue'
else 'Green'
end
Color
,sum(fann_sales)
FROM
slcdpm
group by
case
when fcompany = 'Acme' then 'Red'
when fcompany = 'Acme Rockets' then 'Blue'
else 'Green'
end
假设它通常只返回两种颜色。拉取所有三种颜色并为缺少的值包含0的最佳方法是什么
全联盟 是的,联合所有人可能是你最好的选择
SELECT 'red' AS Color, sum(fann_sales) FROM slcdpm WHERE fcompany = 'Acme' GROUP BY fcompany
UNION ALL
SELECT 'blue' AS Color, sum(fann_sales) FROM slcdpm WHERE fcompany = 'Acme Rockets' GROUP BY fcompany
UNION ALL
SELECT 'green' AS Color, sum(fann_sales) FROM slcdpm WHERE fcompany <> 'Acme' AND fcompany <> 'Acme Rockets' GROUP BY fcompany
试试这个:
SELECT b.Color,
sum(fann_sales)
FROM (
SELECT case
when fcompany = 'Acme' then 'Red'
when fcompany = 'Acme Rockets' then 'Blue'
else 'Green'
end
Color,
fann_sales
FROM slcdpm
) a RIGHT JOIN
(
SELECT 'Red' AS Color
UNION ALL
SELECT 'Blue' AS Color
UNION ALL
SELECT 'Green' AS Color
) b
ON a.Color = b.Color
GROUP BY b.Color
如果必须显示所有颜色,为什么不将它们显示为列
SELECT
(SELECT sum(fann_sales) FROM slcdpm WHERE fcompany = 'Acme') AS RedSum,
(SELECT sum(fann_sales) FROM slcdpm WHERE fcompany = 'Acme Rockets') AS BlueSum,
(SELECT sum(fann_sales) FROM slcdpm WHERE fcompany <> 'Acme' AND fcompany <> 'Acme Rockets') AS GreenSum
否则,只需使用@JohnK813 answer。将组移动到包含更多列的条件和中
select
sum(CASE WHEN fcompany = 'Acme'
THEN fann_sales ELSE 0 END) AS redsales,
sum(CASE WHEN fcompany = 'Acme Rockets'
THEN fann_sales ELSE 0 END) AS bluesales
sum(CASE WHEN fcompany NOT IN ('Acme Rockets', 'Acme')
THEN fann_sales ELSE 0 END) AS greensales
FROM
slcdpm
这件事只需一次。其他答案中的UNION ALL或subquery方法将按子句触及表一次=稍微慢一点 @Andriy M:你是说简单对搜索的案子?如果没有,请正确计算每种颜色的总和?如果是,IN不能被清晰地表示,这是一致的是,简单vs搜索。你对IN的看法是对的,但是不必担心,因为你会用其他的东西来代替它。