2015-07-11 53 views
0
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加入查询来获取项目名称,日期和借方余额的总和,其中借方差额不等于0SQL加入查询以获取项目名称,日期和借方余额不等于0的借方余额总和?

回答

3

看起来您正在使用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不支持这一点。

另请注意使用表别名。这使得写和读查询变得更容易。

+1

要小心,要匹配的问题应该是'HAVING Sum(w.debit)<> 0;' – danihp

+0

@danihp。 。 。这是一个好点。 –

1

您正在寻找having子句。这追加到您的查询:

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子句。