【问题标题】:Do a SELECT based on a CASE statement根据 CASE 语句执行 SELECT
【发布时间】:2020-04-04 06:43:21
【问题描述】:

我正在尝试根据 CASE 执行选择语句

SELECT CASE WHEN TO_CHAR(today, "%a") = 'Mon' 
THEN (SELECT COUNT(*) FROM  jobs WHERE datein > today-2) 
ELSE (SELECT COUNT(*) FROM  jobs WHERE datein = today) 
END CASE;

因此,我希望如果这一天是“星期一”(星期一),然后执行 Select from (monday - 2 days) 并带来所有列/行,而不仅仅是 1 COUNT ,否则执行当天的选择.

如果当天是星期一,结果应该是

id | jobs | date
1  |12,500| 12-7-2019
2  |10,800| 12-8-2019

如果日期与星期一不同,则应该相同,但对于今天的数据

id | jobs | date
3  |35,000| 12-9-2019

如果这不可能,还有其他方法吗?(考虑到我的访问权限有限)

数据库服务器:INFORMIX 12.1 我只能使用 Toad for Data Analysts 或 IBM Data Studio 读取数据库。

【问题讨论】:

  • 请提供示例数据以及您希望从该数据中获得的输出。见Why should I provide a Minimal Reproducible Example for a very simple SQL statement?
  • 显示的查询不会在 Informix 上执行 — CASE 之外的查询没有 FROM 子句。如果这就是选择列表中的全部内容(并且有一个 FROM 子句等),那么我希望看到一个数字。没有按 id 分组,因此不会对聚合进行分组;也不清楚为什么会有带有日期信息的行。所以,我认为您向我们展示的内容不够多——没有足够的 SQL,也没有足够的模式和数据。到目前为止,这个问题还没有答案。请不要显示您提供的示例数据的预期(和实际)输出。
  • 您可能应该将TODAY 更改为MDY(12,10,2019) 或类似的适当日期,以反映在一年的时间(小于该时间)内,TODAY 的值与您的数据不匹配的事实完全没有。

标签: informix toad ibm-data-studio


【解决方案1】:

没有架构和数据样本很难确切知道您想要什么,但如果我们假设您希望根据日期从表作业中获取所有行,您可以执行此查询

SELECT jobs.*
  FROM jobs
 WHERE jobs.datein >=  CASE
                         WHEN WEEKDAY(TODAY) = 1 THEN TODAY-2
                         ELSE TODAY
                       END

我没有你提到的工具,但是这个查询在 dbaccess 的 Informix 12.10 和 14.10 上运行正常。

【讨论】:

  • 这正是我所需要的,你明白了我的想法,也可以直接在 TOAD 中使用。谢谢@Jeroni
猜你喜欢
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多