Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何在SQL中使用用例,显示语法错误_Sql Server 2005_Database_Sql - Fatal编程技术网

Sql server 2005 如何在SQL中使用用例,显示语法错误

Sql server 2005 如何在SQL中使用用例,显示语法错误,sql-server-2005,database,sql,Sql Server 2005,Database,Sql,我试图根据我的查询从表中检索一些记录,但它显示了一个错误 Msg 102,15级,状态1,第2行 “> 选择虚拟账本,(贷记金额借记)作为净额,案例净额 当净值>0时,则当净值

我试图根据我的查询从表中检索一些记录,但它显示了一个错误

Msg 102,15级,状态1,第2行 “>

选择虚拟账本,(贷记金额借记)作为净额,案例净额
当净值>0时,则当净值<0时为“借方”,当净值<0时为“贷方”,否则为“无”
从dbo.vdebit vd内部在vd.LedgerId=vc.LedgerId上连接dbo.vCredit vc

首先,在您的案例中同时使用输入表达式和布尔表达式()。看起来您还试图将case语句的值赋给变量,但语法不正确。我相信这就是你想要的:

select vd.LedgerId,(CreditAmt-DebitAmt) AS NET,
CASE WHEN NET > 0 THEN 'Debit' WHEN NET < 0 THEN 'Credit' ELSE 'Nil' End
AS NetVal
from dbo.vdebit vd INNER JOIN dbo.vCredit vc  ON vd.LedgerId=vc.LedgerId
选择日记账(贷记金额借记)作为净额,
如果净值>0,则当净值<0时为“借方”,然后为“贷方”,否则为“无”
作为NetVal
从dbo.vdebit vd内部在vd.LedgerId=vc.LedgerId上连接dbo.vCredit vc

使用搜索的大小写表达式时,语法如下:

CASE
   WHEN NET > 0 THEN 'Debit'
   WHEN NET < 0 THEN 'Credit'
   ELSE 'Nil'
END
案例
当净值>0时,则为“借方”
当净值<0时,则为“信用”
否则为“零”
结束

所以,只要用CASE替换CASE-NET。

多亏了Wikser和Trey,因为我遇到了一些语法问题,他们引起了我的注意,之后我的查询仍然有问题

问题是-Net是我的列的别名,当我在case语句中检查它时,它无法找到相同的列

错误

select vd.LedgerId,(CreditAmt-DebitAmt) AS NET,
CASE 
   WHEN NET > 0 THEN 'Debit' 
   WHEN NET < 0 THEN 'Credit' 
   ELSE 'Nil' 
End
AS NetVal
from dbo.vdebit vd INNER JOIN dbo.vCredit vc  ON vd.LedgerId=vc.LedgerId
选择日记账(贷记金额借记)作为净额,
案例
当净值>0时,则为“借方”
当净值<0时,则为“信用”
否则为“零”
终点
作为NetVal
从dbo.vdebit vd内部在vd.LedgerId=vc.LedgerId上连接dbo.vCredit vc
进行了更正

select vd.LedgerId,(CreditAmt-DebitAmt) AS NET,
CASE 
   WHEN (CreditAmt-DebitAmt) > 0 THEN 'Debit' 
   WHEN (CreditAmt-DebitAmt) < 0 THEN 'Credit' 
   ELSE 'Nil' 
End
AS NetVal
from dbo.vdebit vd INNER JOIN dbo.vCredit vc  ON vd.LedgerId=vc.LedgerId
选择日记账(贷记金额借记)作为净额,
案例
当(贷记金额借记)>0时,则为“借记”
当(贷记金额借记)小于0时,则为“贷记”
否则为“零”
终点
作为NetVal
从dbo.vdebit vd内部在vd.LedgerId=vc.LedgerId上连接dbo.vCredit vc

仍然显示相同的问题Wikser的答案是您的主要问题。我以前错过了。@Wikser:我不知道是什么问题,但这仍然不起作用。是的,您只能在t_sql的ORDER BY子句中使用别名,因为在句子的唯一部分,列的新名称是已知的。
select vd.LedgerId,(CreditAmt-DebitAmt) AS NET,
CASE 
   WHEN (CreditAmt-DebitAmt) > 0 THEN 'Debit' 
   WHEN (CreditAmt-DebitAmt) < 0 THEN 'Credit' 
   ELSE 'Nil' 
End
AS NetVal
from dbo.vdebit vd INNER JOIN dbo.vCredit vc  ON vd.LedgerId=vc.LedgerId