【问题标题】:TSQL: referencing a column with case-statementSQL:引用带有 case-statement 的列
【发布时间】:2016-07-14 17:29:12
【问题描述】:

如果应该从案例语句中“提取”列,是否可以从表中引用该列?

update t1 
set col1 = value
from table1 t1, (select Col3, Col4 from table1) t2
where t1.(CASE 
             WHEN Col3 > 0 THEN Col1 
             ELSE Col2) = t2.(CASE WHEN Col3 > 0
                                   THEN Col1 
                                   ELSE Col2 
                              END)

提前感谢您的帮助!

【问题讨论】:

  • 旁白:This 答案提供了考虑使用更现代的JOIN 语法的几个理由。

标签: sql-server tsql alias


【解决方案1】:

您可以在 case 语句中使用表别名来引用列名,例如,

update t1 
set t1.col1 = value
from table1 t1, (select Col3, Col4 from table1) t2
where CASE 
         WHEN t1.Col3 > 0 THEN t1.Col1 
         ELSE t1.Col2 
        END = CASE WHEN t2.Col3 > 0
                THEN t2.Col1 
                ELSE t2.Col2 
            END

先对 case 语句求值,然后进行比较。

【讨论】:

  • 这个解决方案对我不起作用,因为我也在 t2 中使用“group by”并且无法添加一些列。难道就没有别的办法了吗?
  • 您应该提出适当/完整的细节问题,以便您获得有效的解决方案。在派生查询中使用 group by 不会影响外部条件!
猜你喜欢
  • 2010-10-22
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多