【问题标题】:Query SELECT calculated column with condition使用条件查询 SELECT 计算列
【发布时间】:2017-10-31 17:57:58
【问题描述】:

我需要在我的 SELECT QUERY 中创建一个有条件的列。像这样的:

SELECT NAME, ADDRESS, IF TABLE.COD=101 THEN return TABLE.VALUE AS TABLE  
FROM CRM

所以 SELECT 中的第三个参数是我计算的带有条件的列。

我相信这很简单,但我没有成功解决这个问题。

【问题讨论】:

  • 提示:CASE 表达式。
  • 请停止大喊你问题的标题。它使文本更难阅读,不会更快地为您提供帮助,而且当您来到这里向我们大喊以引起注意时,这是非常粗鲁的。请立即停止。
  • 对不起朋友,我猜你错了。我无意大喊大叫或引起注意。我的写作风格是使用大写的 SQL 命令。不要把它当作私人的,好吗?
  • 什么是“TABLE.COD”?这听起来像是 TABLE 表中的 COD 列,但您的“FROM”子句中只有一个“CRM”故事!!!

标签: sql select firebird


【解决方案1】:

由于您没有提供任何数据和预期的输出,因此很难弄清楚您到底想要什么。您仍然可以尝试以下一种。

SELECT NAME, ADDRESS, (Case WHEN TABLE.COD=101 THEN TABLE.VALUE END) AS TABLE  
FROM CRM

【讨论】:

  • 嗨 Chetan。有效 !抱歉,我没有提供数据,但我认为没有它我的问题很容易理解。非常感谢 !祝你有美好的一天!
【解决方案2】:

另一种选择是使用IIF 函数。

https://firebirdsql.org/refdocs/langrefupd20-iif.html

坦率地说,IIF 只是函数名称,本质上它是一种简写形式,是扩展为 CASE 语句的宏替换。

这种密切的关系可能是你在写你的陈述时弄错IFCASE的原因。

 SELECT NAME, ADDRESS, IIF(TABLE.COD=101, TABLE.VALUE, NULL) as TABLE FROM CRM

现在,您的说法似乎不真实。您指的是 TABLE.CODTABLE.VALUE - 这些显然是第二个表中的一些字段,但您忘记将其包含在您的 FROM 子句中!

因此,我认为您真正需要的不是一些条件/计算,而是一个普通的旧 OUTER JOIN
https://en.wikipedia.org/wiki/Join_(SQL)

 SELECT A.NAME, A,ADDRESS, B.VALUE as TABLE 
 FROM CRM A
   LEFT JOIN SomeTable B ON B.COD=101 AND B.XXXX = A.YYYY

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 2021-10-08
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多