用于在我的Excel中复制SUMIF的SQL函数
我是SQL Server 2012新手,希望尽量减少Excel中的数据处理 我有我的主数据集,然后我想从这些数据中进行SUMIF,只返回SUMIF不等于零的行 我使用下面的函数,它在不同的时间返回不同的结果 错误的可能原因是某些行的AccID为空用于在我的Excel中复制SUMIF的SQL函数,sql,sql-server,excel-formula,sumifs,Sql,Sql Server,Excel Formula,Sumifs,我是SQL Server 2012新手,希望尽量减少Excel中的数据处理 我有我的主数据集,然后我想从这些数据中进行SUMIF,只返回SUMIF不等于零的行 我使用下面的函数,它在不同的时间返回不同的结果 错误的可能原因是某些行的AccID为空 , main_data2 as ( select md.* from main_data md left join ( select
, 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
)
如果希望保留最终结果集中的所有帐户,则左联接似乎是合适的。您已有的子查询将查找具有非零和的帐户。您可以将main_数据左键联接到此子查询,然后如果每个记录的对应帐户和为零,则可以选择将其标记为空
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
如果希望保留最终结果集中的所有帐户,则左联接似乎是合适的。您已有的子查询将查找具有非零和的帐户。您可以将main_数据左键联接到此子查询,然后如果每个记录的对应帐户和为零,则可以选择将其标记为空
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
我需要在最终结果中包括AccID为空的行。现在您正在更改您的要求。您是只想要其帐户具有非零和的记录,还是想要所有记录?如果是后者,那么子查询的意义是什么?我需要在最终结果中包含AccID为空的行。现在您正在更改您的要求。您是只想要其帐户具有非零和的记录,还是想要所有记录?如果是后者,那么子查询的意义是什么?我不需要在最终结果中包含所有结果。只需要那些sumif余额非零的和那些没有accountID的,这样我就可以手动处理它们了。就数据加载而言,通常在sumif前后加载50万个数据,它应该只返回大约5000个行项目。此过程试图避免在excel.ones中处理大数据,而excel.ones中根本没有accountID。。。这没有意义,因为您正在进行自联接。帐户ID的设置原则上在联接的两侧都是相同的。啊,我明白你的意思了,正如我提到的,当你得到一个空白单元格时,如果它返回0,我对SQL和Excel都是新手。但是你的观点是对的,在这里不用担心。如果你给我们展示你的预期结果,也许我可以以某种方式改变我的答案。我不需要在我的最终结果中包含所有结果。只需要那些sumif余额非零的和那些没有accountID的,这样我就可以手动处理它们了。就数据加载而言,通常在sumif前后加载50万个数据,它应该只返回大约5000个行项目。此过程试图避免在excel.ones中处理大数据,而excel.ones中根本没有accountID。。。这没有意义,因为您正在进行自联接。帐户ID的设置原则上在联接的两侧都是相同的。啊,我明白你的意思了,正如我提到的,当你得到一个空白单元格时,如果它返回0,我对SQL和Excel都是新手。但你的观点是对的,在这里不用担心。如果你给我们展示你的预期产出,也许我可以以某种方式改变我的答案。