【问题标题】:SQL function to replicate SUMIF in my Excel在我的 Excel 中复制 SUMIF 的 SQL 函数
【发布时间】:2017-06-15 06:45:40
【问题描述】:

我是 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

)

【问题讨论】:

  • 我需要在最终结果中包含 AccID 为空的那些行。
  • 现在您正在更改您的要求。您只想要帐户总和不为零的记录,还是想要所有记录?如果是后者,那么子查询的意义何在?

标签: sql sql-server excel-formula sumifs


【解决方案1】:

如果您想在最终结果集中保留所有帐户,那么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

【讨论】:

  • 我的最终结果不需要所有结果。只需要 sumif 余额非零和根本没有 accountID 的那些(所以我可以手动处理它们)。就数据加载而言,通常那里有 50 万个数据,在 sumif 之后它应该只返回大约 5000 个行项目。这个过程试图避免在 excel 中处理大数据。
  • ones with no accountID at all ...这没有意义,因为您正在进行自加入。原则上,连接双方的帐户 ID 集相同。
  • 嗯明白了你的意思,正如我提到的,当你有一个空白单元格并且当你执行 sumif 时它返回 0 时,我是 SQL 和 Excel 的新手。但你的观点是正确的,无需担心在这里。
  • 如果您向我们展示您的预期输出,也许我可以以某种方式改变我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2023-04-04
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多