【问题标题】:How can I use Min in a case statement如何在案例陈述中使用 Min
【发布时间】:2016-09-07 05:03:14
【问题描述】:

我收到错误: 在预期条件的上下文中指定的非布尔类型表达式,靠近“THEN”。

我该如何解决这个问题?

这里是 sql。

Select 
 HEADER_ID, 
 CASE 
  WHEN MIN(OPPTY_HEADER_ID) THEN STATCD='SP66'ELSE STATCD AS STACD,
 TYPE, NL_IND
FROM nl_dups_load 

【问题讨论】:

  • 你想做什么?这是某种 RDBMS 问题吗?
  • 我应该包含更多信息。此表是重复 header_ids 的表。每个 header_id 都有和 oppty_header_id。所以每个 header_id 有 2 个 oppty_header_id。所以我想为每个标头 id 取最小 oppty_header_id 并更改它的 statcd。
  • edit您的问题在您的评论中包含信息。

标签: mysql case min


【解决方案1】:

您需要在CASE WHEN 语句的第一个子句中给出真/假结果才能使其发挥作用。

将其更改为:

Select HEADER_ID 
  , CASE WHEN MIN(OPPTY_HEADER_ID) > 0 THEN STATCD = 'SP66' ELSE STATCD END AS STACD
  , TYPE
  , NL_IND
FROM nl_dups_load 

将“修复”该特定错误,但其结果可能不是您想要的。另外,我不相信您可以在 CASE 语句中以该格式使用聚合函数(即“MIN”),因此如果您修复原始错误,您可能会遇到另一个错误。

您必须更好地解释您的问题和所需的 SQL 结果。

编辑:

我应该包含更多信息。此表是重复表 header_ids。每个 header_id 都有和 oppty_header_id。所以有2个 oppty_header_id 到每个 header_id。所以我想拿分钟 oppty_header_id 每个标头 id 并更改其 statcd。

听起来您想要以下内容(做出大量假设)。 在使用它之前测试一下,因为 UPDATE 查询不容易反转。

UPDATE A
SET A.STATCD = 'SP66'
FROM nl_dups_load AS A
INNER JOIN (
   SELECT B.HEADER_ID, MIN(OPPTY_HEADER_ID) AS MinOppty 
   FROM nl_dups_load AS B GROUP BY B.HEADER_ID
) AS C ON A.HEADER_ID = C.HEADER_ID AND A.OPPTY_HEADER_ID = C.MinOppty

不过,我确实需要查看源表的一些示例行以及这些相同行的示例以及在结果表中所做的更改,以确保这就是您要执行的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2023-04-10
    • 2010-10-30
    • 2016-05-13
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多