如何在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中以可执行方式编写以下查询
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;
这里首先acc_head来自my_crem表,第二个来自my_debm表...可以帮助这个... – 2011-04-04 07:38:02
thr xvar不是列名,它是一个局部变量... thn我该怎么做那个... xvar有2或1或2 .... plz帮我 – 2011-04-04 07:45:55
把@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;
但xvar不是列名..它是私有变量... thn我该如何解决这个问题... plz帮助我 – 2011-04-04 11:20:37
我想你忘记在你的变量名之前加'@' 我编辑了代码它现在应该可以工作 – Alaa 2011-04-04 11:59:16
不要忘了接受一个答案,如果它帮助你。 – 2011-04-04 05:58:00