2012-09-07 33 views
1

我有以下SQL語句:在計算中使用的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'」

感謝名單

回答

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 
0

沒有,它不能完成。你需要重複dispositonAmount的計算。

... 
m.check_amount - sh.sumAmount As dispositionAmount, 
m.check_amount - (m.check_amount - sh.sumAmount) AS openBalance 
... 
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 
0

可以使用CROSS APPLY CROSS APPLY

SELECT my_num, my_num*5 AS another_number FROM table CROSS APPLY (SELECT 5 AS my_num) X