0

我正在检索mlog表的结果并在以下代码 1 的帮助下计算 的小计qtyn。我不知道如何将我的第二个代码标准与第一个结合起来。

谢谢你的帮助

1.

SELECT autn, date, itcode, qtyn, out,
       date, phstock,
       qtyn + COALESCE(
                (SELECT SUM(qtyn) FROM  dbo.mlog b
                 WHERE b.autn < a.autn
                     AND itcode = '40'), 0) AS balance
FROM dbo.mlog a
WHERE (itcode = '40')
ORDER BY autn 

2.

date >=(SELECT MAX([date]) FROM mlog)
4

2 回答 2

2

要将条件附加到代码中,请使用ANDor OR。例如:

SELECT a.autn, a.date, a.itcode, a.qtyn, a.out,
       a.date, a.phstock,
       a.qtyn + COALESCE(
                (SELECT SUM(b.qtyn) FROM  dbo.mlog b
                 WHERE b.autn < a.autn
                     AND b.itcode = '40'), 0) AS balance
FROM dbo.mlog a
WHERE (a.itcode = '40' AND a.date >= (SELECT MAX([c.date]) FROM mlog c) )
ORDER BY a.autn 

未经测试,但应该做你想做的

于 2012-12-29T11:41:26.130 回答
0

我听说 SQL Server 的效率相当低coalesce(),因为它运行第一部分两次。这是另一种写法:

with ml as (
    SELECT ml.autn, ml.date, ml.itcode, ml.qtyn, ml.out, ml.date, ml.phstock
    FROM dbo.mlog ml
    WHERE ml.itcode = '40' AND ml.date >= (SELECT MAX(ml1.date]) FROM mlog ml1)
   )
select ml.*,
       (select sum(m1l.qtyn) from ml ml1 where ml1.autn <= ml.autn) as balance
from ml
ORDER BY ml.autn 

我还想知道该where子句是否会更有效:

    WHERE ml.itcode = '40' AND ml.date = (SELECT top 1 ml1.date FROM mlog ml1 order by ml1.date desc)
于 2012-12-29T16:31:03.143 回答