如何在SQL Server Express 2008中以可执行方式编写以下查询

问题描述:

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

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

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