Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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案例:如果两个不同的列=某物,那么第三列=某物;如果[a]=a和[b]=b,那么[c]=c_Sql_Sql Server_Case - Fatal编程技术网

SQL案例:如果两个不同的列=某物,那么第三列=某物;如果[a]=a和[b]=b,那么[c]=c

SQL案例:如果两个不同的列=某物,那么第三列=某物;如果[a]=a和[b]=b,那么[c]=c,sql,sql-server,case,Sql,Sql Server,Case,以下是我的脚本: SELECT * ,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) THEN s.Description = 'CONFIRMED' END FROM Repair r INNER JOIN Conversion C ON R.Confir

以下是我的脚本:

SELECT 
    *
    ,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
          THEN s.Description = 'CONFIRMED' 
     END
FROM
    Repair r
INNER JOIN 
    Conversion C
ON 
    R.Confirmed = C.confirmed
AND 
    r.performed = c.performed
INNER JOIN
    Status s
ON 
    a.name = s.name
WHERE 
    Status = 'CONFIRMED'
AND 
    Received BETWEEN '01-31-2013' AND '12-31-2013'
and part = '4'
注意:我在CASE语句的最后一个
'='
'END'
下得到了红色的波形


我的语法出了什么问题?

我不清楚您想要实现什么,但您可能需要这样的东西

,CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL 
           AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
 THEN 'CONFIRMED' ELSE s.Description END AS Description
如果您只是想更改Description when confirm='YES'的值,那么下面的操作就可以了

,CASE WHEN Confirmed = 'YES' THEN 'CONFIRMED' ELSE s.Description END AS Description

您也不需要使用
SELECT*
,而是需要分别标识每一列,这样
说明
就不会在SELECT中出现两次。我不确定为什么
s.Description为空,并且如果您试图填写缺少的描述,那么…
不是您案例条件的一部分。

您的
CASE
语句应该如下所示。由于您试图向
description
s.description='CONFIRMED'
添加值,因此出现错误。这是不允许的

CASE WHEN (Confirmed = 'YES' AND R.Performed IS NULL 
AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
THEN 'CONFIRMED' END AS Description 

试图追随你真正想要的,这很难,但我认为你想要的是:

SELECT r.confirmed
       ,r.status
       ,a.name
       ,<other fields>
       ,CASE WHEN (    Confirmed = 'YES' 
                   AND R.Performed IS NULL 
                   AND (   R.Name NOT LIKE 'C%' 
                        OR R.Name NOT LIKE 'Q%')
                  ) 
             THEN 'CONFIRMED' 
             ELSE s.Description 
         END AS Description
FROM <your joined and filtered tables>
选择r
,r.地位
,a.姓名
,
,案例时间(已确认=‘是’
R.Performed为空
和(R.名称不象'C%'
或R.名称与“Q%”不同)
) 
然后“确认”
美国描述
以描述结尾
从…起
我认为,这样做的想法是,您只需要在这个select查询的输出中修改s.description,而不需要在源表中修改

CASE s.Description WHEN (Confirmed = 'YES' AND R.Performed IS NULL AND (R.Name NOT LIKE 'C%' OR R.Name NOT LIKE 'Q%')) 
          THEN 'CONFIRMED' 
     END

我没有使用else部分,因为您在代码中没有使用它,而且它不会导致任何语法错误

为什么要给s.Description赋值?您正在尝试进行更新吗?因为我正在编写SSIS包,并且有大量丢失的数据…通常我会执行测试并确认哪个是描述值的依赖项。缺少某些执行的数据,这意味着说明将为空。如果我的案例中的规则是正确的,那么我需要在
之后确认描述属性,然后
你必须有一个表达式,而不是赋值。你的建议是什么…我是一名实习生
(R.Name不象'C%'或R.Name不象'Q%')
什么时候可能是错误的?;-)这可能有助于简化,但仍然不起作用。当其他列为true时,我需要将s.Description列设置为='confirm'。您能否在问题中添加更多内容,准确描述描述应在何时“确认”,以及描述应在何时保留其现有值。我只是从你的问题中复制了条件,所以我假设这就是你想要的。为了简单起见…
当[confirm]=“YES”时,那么[s.Description]=“confirm”
当confirm不等于“YES”时,那么Description应该保留它的值吗?在你的情况下,你还有其他的东西吗?我会非常小心的。在select中执行此操作的语法非常简单,正如我上面所示。谁知道永久改变实际数据的后果是什么呢。考虑到案例陈述中的其他规则,我试图让s.Description列='确认'。这在查询中是不允许的?这是不可能的,因为您肯定正在执行
选择
而不是
插入
更新
。插入是否会永久更改记录?这不是我想要的…只是对于我的ssis包,您仍然感到困惑,如果
description
是一个参数,您仍然可以这样做,但它是状态表中的一列,除了执行插入/更新之外,您不能这样做。否。忘了加入吧。。。您正在进行选择,这是不允许的。