Verwenden eines SQL-Alias ​​in einer Berechnung, um zusätzlichen Alias ​​zu erstellen

Ich habe die folgende SQl-statement:

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 

Ich möchte jedem der ausgewählten Aussagen der UNION eine zusätzliche Spalte hinzufügen. Allerdings muss ich einen Alias ​​verwenden, der als vorhergehende Spalte erstellt wurde.

Beispielsweise. Ich möchte folgendes machen

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

und

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

beziehungsweise

Kann das geschehen Derzeit, so wie ich es oben mache, bekomme ich einen "ungültigen Spaltennamen" dispositionAmount '"

thanx

   

Nein, es kann nicht auf dem gleichen Niveau sein, da der Alias, was du in deiner Auswahl nur "verfügbar" in der Reihenfolge nach Teil gibst. Dies ist, weil die logische Abfrage Verarbeitung.

Dazu solltest du mehr Level erstellen oder den Ausdruck wieder verwenden.

Und ich weiß nicht, dass du das machen willst:

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

Weil es dann gleich ist:

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

Welches ist:

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

Nein, das geht nicht. Sie müssen die Kalkulation von dispositonAmount wiederholen.

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

Der Ausdruck check_amount-dispositionAmount ist derselbe wie check_amount-(check_amount - sh.sumAmount) , was derselbe ist wie (check_amount-check_amount) + sh.sumAmount , also nur sh.sumAmount .

Damit:

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

Sie können die CROSS APPLY CROSS APPLY verwenden

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