如何在案例陈述中使用Min

时间:2016-05-11 16:41:34

标签: mysql case min

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

我该如何解决这个问题?

这是sql。

@Entity
@Table(name = "BOOKS")
@SequenceGenerator(name = "GEN_BOOKS", sequenceName = "GEN_BOOKS", allocationSize = 1)
@Audited
public class BOOK implements Serializable , Comparable<BOOK> {
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BOOKS")
    private Integer id;
    private String title;

}

1 个答案:

答案 0 :(得分:0)

您需要在CASE WHEN语句的第一个子句中使用true / false结果才能使其正常运行。

将其更改为:

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 

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

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

编辑:

  

我应该包含更多信息。该表是重复的表   header_ids。每个header_id都有和oppty_header_id。所以有2个   oppty_header_id到每个header_id。所以我想拿分钟   每个标题id的oppty_header_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

尽管如此,我确实需要查看源表的一些示例行以及这些相同行的示例,并在结果表中进行更改,以确保这是您正在查找的内容要做。