Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 当条件基于当前行值时_Sql_Sql Server_Database_Select_Case - Fatal编程技术网

Sql 当条件基于当前行值时

Sql 当条件基于当前行值时,sql,sql-server,database,select,case,Sql,Sql Server,Database,Select,Case,在我的SELECTquery中,我想在我的CASE中为名为IsActive的值设置一个条件,以便如果当前行的列类型为“adhoc”,则将IsActive的值设置为“n/a” 但是当(Type)=“adhoc”然后是“n/a”时,我在行中得到了这个错误: “=”附近的语法不正确 如何根据当前行的条件做出决定?试试以下方法: SELECT (CASE Type WHEN 'scheduled' THEN 'Scheduled' WHEN 'adhoc'

在我的
SELECT
query中,我想在我的
CASE
中为名为IsActive的值设置一个条件,以便如果当前行的列类型为“adhoc”,则将IsActive的值设置为“n/a”

但是当(Type)=“adhoc”然后是“n/a”时,我在
行中得到了这个错误:

“=”附近的语法不正确

如何根据当前行的条件做出决定?

试试以下方法:

SELECT (CASE Type
            WHEN 'scheduled' THEN 'Scheduled'
            WHEN 'adhoc' THEN 'AdHoc'
            ELSE 'Unknown'
        END) AS 'Type',
       (CASE 
            WHEN Type = 'adhoc' THEN 'n/a'
            WHEN IsActive = 0 THEN 'Stopped'
            WHEN IsActive = 1 THEN 'Active'
        END) AS 'Status'
FROM MyTable;

您的第二个
案例
基于一个列,然后您试图在
中添加一个条件,当
时,这是不允许的:

CASE IsActive 
            WHEN (Type) = 'adhoc' THEN 'n/a'
            WHEN 0 THEN 'Stopped'
            WHEN 1 THEN 'Active'
       END AS 'Status'
我想您是有意这样做的(使用一个不带列的
案例
,并在
时将条件放入
):


MS Sql Server不支持当前的计算行操作。 为了实现这一目标,您必须提到Cte

with cteType as (
SELECT CASE Type
            WHEN 'scheduled' THEN 'Scheduled'
            WHEN 'adhoc' THEN 'AdHoc'
            ELSE 'Unknown'
       END AS 'Type'
FROM MyTable)

select Type
,
       CASE IsActive 
            WHEN (Type) = 'adhoc' THEN 'n/a'
            WHEN 0 THEN 'Stopped'
            WHEN 1 THEN 'Active'
       END AS 'Status'
FROM cteType 

这将起作用

Pedram jaan您的查询如下:

SELECT CASE [Type]
            WHEN 'scheduled' THEN 'Scheduled'
            WHEN 'adhoc' THEN 'AdHoc'
            ELSE 'Unknown'
       END AS 'Type',
       CASE  
            WHEN [Type] = 'adhoc' THEN 'n/a'
            WHEN IsActive = 0 THEN 'Stopped'
            WHEN IsActive = 1 THEN 'Active'
       END AS 'Status'
FROM dbo.MyTable

使用括号中的类型,如[Type]。这是一个关键词。

Pedram jaan?哈哈,妈妈!你的回答是正确的。但恐怕我得选一个早些时候发布的。
SELECT CASE Type
        WHEN 'scheduled' THEN 'Scheduled'
        WHEN 'adhoc' THEN 'AdHoc'
        ELSE 'Unknown'
   END AS 'Type',
   CASE WHEN [Type] = 'adhoc' THEN 'n/a'                        
        WHEN IsActive = 0 THEN 'Stopped'
        WHEN IsActive = 1 THEN 'Active'
   END AS 'Status'
FROM MyTable
with cteType as (
SELECT CASE Type
            WHEN 'scheduled' THEN 'Scheduled'
            WHEN 'adhoc' THEN 'AdHoc'
            ELSE 'Unknown'
       END AS 'Type'
FROM MyTable)

select Type
,
       CASE IsActive 
            WHEN (Type) = 'adhoc' THEN 'n/a'
            WHEN 0 THEN 'Stopped'
            WHEN 1 THEN 'Active'
       END AS 'Status'
FROM cteType 
SELECT CASE [Type]
            WHEN 'scheduled' THEN 'Scheduled'
            WHEN 'adhoc' THEN 'AdHoc'
            ELSE 'Unknown'
       END AS 'Type',
       CASE  
            WHEN [Type] = 'adhoc' THEN 'n/a'
            WHEN IsActive = 0 THEN 'Stopped'
            WHEN IsActive = 1 THEN 'Active'
       END AS 'Status'
FROM dbo.MyTable