1

次のSQlステートメントがあります。

SELECT id  + 100000000000000000 AS id,  
    a.external_code + CAST(id AS varchar(15)) as crUniqueId,  
    m.check_amount,  
    'C' as crType,  
    m.postprint_date as activationDate,  
    m.postprint_date as creationDate,  
    m.memo_explanation as reasonLine1,  
    m.check_no, 
    m.check_amount - sh.sumAmount As dispositionAmount 
    FROM md_master m 
    Join accounts a on m.account_tag = a.acct_id 
    LEFT JOIN (SELECT master_id,  
                SUM(md_cr_pending.current_amount) as sumAmount  
                FROM md_cr_pending 
                Group BY master_id) sh ON master_id = m.ID 
    WHERE (m.postprint_tag = 2) OR (m.postprint_tag = 4) OR  
          (m.postprint_tag = 5) OR (m.postprint_tag = 7) 

    UNION ALL  

    SELECT id + 200000000000000000 as id,  
    'PERCHK' + CAST(id AS varchar(15)) as crUniqueId,  
    check_amount,  
    'P' as crType,  
    business_date as activationDate,  
    business_date as creationDate,  
    identify_description as reasonLine1,  
    check_no, 
    check_amount - sh.sumAmount As dispositionAmount 
    FROM cd_personal_checks  
    LEFT JOIN (SELECT cd_personal_checks_id,  
                SUM(md_cr_pending.current_amount) as sumAmount  
                FROM md_cr_pending 
                Group BY  cd_personal_checks_id) sh  
                ON sh.cd_personal_checks_id = cd_personal_checks.ID

UNIONの各selectステートメントに列を追加したいと思います。ただし、前の列で作成したエイリアスを使用する必要があります。

例えば。次のことをしたい

m.check_amount - sh.sumAmount As dispositionAmount, m.check_amount-dispositionAmount AS openBalance

check_amount - sh.sumAmount As dispositionAmount,  check_amount-dispositionAmount AS openBalance

それぞれ

これはできますか?現在、上記の方法で、「無効な列名'dispositionAmount'」が表示されます。

ありがとう

4

4 に答える 4

2

いいえ、同じレベルにすることはできません。選択したエイリアスは、[並べ替え]部分でのみ「使用可能」であるためです。これは、論理クエリ処理が原因です。

このためには、より多くのレベルを構築するか、式を再度使用する必要があります。

そして、私はあなたがこれをしたいのか分かりません:

m.check_amount - sh.sumAmount As dispositionAmount, 
m.check_amount - dispositionAmount AS openBalance

それは等しいので:

m.check_amount - sh.sumAmount As dispositionAmount, 
m.check_amount - m.check_amount + sh.sumAmountAS AS openBalance

これは:

m.check_amount - sh.sumAmount As dispositionAmount, 
sh.sumAmountAS AS openBalance
于 2012-09-07T15:22:43.787 に答える
0

check_amount-dispositionAmountはと同じでcheck_amount-(check_amount - sh.sumAmount)、はと同じな(check_amount-check_amount) + sh.sumAmountので、それはちょうどsh.sumAmountです。

それで:

check_amount - sh.sumAmount As dispositionAmount, sh.sumAmount AS openBalance
于 2012-09-07T15:26:22.103 に答える
0

いいえ、できません。の計算を繰り返す必要がありますdispositonAmount

...
m.check_amount - sh.sumAmount As dispositionAmount, 
m.check_amount - (m.check_amount - sh.sumAmount) AS openBalance
...
于 2012-09-07T15:24:24.087 に答える