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
是一个参数,您仍然可以这样做,但它是状态表中的一列,除了执行插入/更新之外,您不能这样做。否。忘了加入吧。。。您正在进行选择,这是不允许的。