SQL 连接查询以获取借方余额不等于 0 的借方余额的项目名称、日期和总和?

Posted

技术标签:

【中文标题】SQL 连接查询以获取借方余额不等于 0 的借方余额的项目名称、日期和总和?【英文标题】:SQL Join Query to Get Item Name , Date and Sum of Debit Balance where Debit balance Not Equal to 0? 【发布时间】:2015-07-11 12:30:56 【问题描述】:
SELECT dbo.items.NAME, 
       CONVERT(VARCHAR(20), dbo.warehouse.date, 101)AS Date, 
       Sum (dbo.warehouse.debit)                    AS Quantity 
FROM   dbo.warehouse 
       INNER JOIN dbo.items 
               ON dbo.warehouse.businessunitid = dbo.items.businessunitid 
                  AND dbo.warehouse.itemid = dbo.items.itemid 
GROUP  BY dbo.items.NAME, 
          CONVERT(VARCHAR(20), dbo.warehouse.date, 101) 

SQL 连接查询以获取借方余额不等于 0 的借方余额的项目名称、日期和总和

【问题讨论】:

【参考方案1】:

看起来您正在使用 SQL Server。

SELECT i.NAME, 
       CONVERT(VARCHAR(20), w.date, 101 ) AS Date, 
       Sum(w.debit) AS Quantity 
FROM dbo.warehouse w INNER JOIN
     dbo.items i
     ON w.businessunitid = i.businessunitid AND
        w.itemid = i.itemid 
GROUP BY i.NAME, CONVERT(VARCHAR(20), w.date, 101) 
HAVING Sum(w.debit) > 0;

这假设w.debit 永远不会是负数。 (在金融应用程序中,美元金额通常总是正数。)当然,如果它可以是负数,您可能希望:

HAVING Sum(w.debit) <> 0;

或:

HAVING Sum(w.debit) < 0;

视情况而定。

在许多其他数据库中,您可以在HAVING 子句中使用别名:

HAVING Quantity > 0

但 SQL Server 不支持此功能。

还要注意表别名的使用。这样可以更轻松地编写和读取查询。

【讨论】:

小心,匹配问题应该是HAVING Sum(w.debit) &lt;&gt; 0;【参考方案2】:

您正在寻找有子句。将此附加到您的查询中:

HAVING Sum (dbo.warehouse.debit) <> 0

引用 HAVING (Transact-SQL) docs -- 你的 sql 看起来像 t-sql --

HAVING (Transact-SQL)

指定组或聚合的搜索条件。 HAVING 只能与 SELECT 语句一起使用。 HAVING 通常用于 GROUP BY 子句。当不使用 GROUP BY 时,HAVING 的行为类似于 WHERE 子句。

【讨论】:

以上是关于SQL 连接查询以获取借方余额不等于 0 的借方余额的项目名称、日期和总和?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算贷方和借方的余额?

使用Mysql从不同名称的不同表中选择值作为贷方和借方并计算余额

如何计算总账中的贷方、借方和余额?

从借方和贷方表计算账户余额

SQL中空值查询''与null 的区别

运行余额的sql查询