0

次のコード1を使用して、テーブルの結果を取得し、mlogの小計を計算してqtynいます。2番目のコード基準を最初のコード基準に結合する方法に固執しています。

助けてくれてありがとう

1.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.2。

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

2 に答える 2

2

コードに条件を追加するには、ANDまたはを使用します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

coalesce()SQL Serverは、最初の部分を2回実行するため、ではかなり非効率的であると聞いています。これを書く別の方法は次のとおりです。

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 に答える