2011-04-04 86 views
1
select doc_no,date,acc_no,amount, 
if xvar=1 
(select acc_head from my_crem c where c.acc_no=o.acc_no) as acc_head 
else 
(select acc_head from my_debm c where c.acc_no=o.acc_no) as acc_head 
from my_ordm o; 

在上述查詢中,xvar不是列名。這是一個局部變量名稱。那我怎麼寫上面的查詢呢?如何在SQL Server Express 2008中以可執行方式編寫以下查詢

+0

不要忘了接受一個答案,如果它幫助你。 – 2011-04-04 05:58:00

回答

3
select 
    o.doc_no, 
    o.date, 
    o.acc_no, 
    o.amount, 
    CASE 
     WHEN @xvar = 1 THEN c.acc_head 
     ELSE d.acc_head 
    END as acc_head 
from 
    my_ordm o 
    left join my_crem c on c.acc_no = o.acc_no 
    left join my_debm d on d.acc_no = o.acc_no; 
+0

這裏首先acc_head來自my_crem表,第二個來自my_debm表...可以幫助這個... – 2011-04-04 07:38:02

+0

thr xvar不是列名,它是一個局部變量... thn我該怎麼做那個... xvar有2或1或2 .... plz幫我 – 2011-04-04 07:45:55

+1

把@xvar,而不是xvar,它應該沒問題。在這種情況下,連接的順序無關緊要,只要確保CASE是正確的,那麼當@xvar = 1時,您將從my_crem而不是my_debm獲取acc_head。 – cairnz 2011-04-04 08:07:30

0
select 
    doc_no, 
    date, 
    acc_no, 
    amount, 
    Case @xvar 
      WHEN 1 Then (select acc_head from my_crem c where c.acc_no = o.acc_no) 
      ELSE (select acc_head from my_debm c where c.acc_no = o.acc_no) 
    END AS acc_head 
from my_ordm o; 
+0

但xvar不是列名..它是私有變量... thn我該如何解決這個問題... plz幫助我 – 2011-04-04 11:20:37

+0

我想你忘記在你的變量名之前加'@' 我編輯了代碼它現在應該可以工作 – Alaa 2011-04-04 11:59:16

相關問題