我是SQL Server 2012的新手,希望尽量减少Excel中的数据处理。
我有我的主数据集然后我想从这些数据中做一个SUMIF,并且只返回sumif不等于零的行。
我使用以下功能,它会在不同时间返回不同的结果。
错误的可能原因是某些行的AccID为空。
, main_data2 as
(
select
md.*
from main_data md
left join
(
select
AccID
,sum(amount) as total_amount
from main_data
group by AccID
having sum(amount) <> 0
) md2 on md.AccID = md2.AccID
where md2.AccID is null
)
答案 0 :(得分:0)
如果您想保留最终结果集中的所有帐户,那么LEFT JOIN
似乎是合适的。您已经拥有的子查询会找到非零和的帐户。您可以将main_data
连接到此子查询,然后可选地将每个记录标记为空,如果其相应的帐户总和为零。
SELECT
md.*,
CASE WHEN md2.AccID IS NULL THEN 'Empty' END AS label
FROM main_data md
LEFT JOIN
(
SELECT AccID, SUM(amount) AS total_amount
FROM main_data
GROUP BY AccID
HAVING SUM(amount) <> 0
) md2
ON md.AccID = md2.AccID