【问题标题】:Case Statement with multiple columns and each with a specific name具有多列且每列具有特定名称的案例语句
【发布时间】:2015-07-14 18:59:47
【问题描述】:

可能有一种更简单的方法可以做到这一点,但现在我正在使用联合来获得我的结果。在我的查询中,无论驱动程序列如何,我都会得到 2 行数据。 如果驱动程序列为空,则期望的结果是从结果中排除该行,但如果它不为空,则需要将其包括在内。

2 行将是最大值,如果两者都为空,则没有行。

这可能吗?

查询:

选择 圆形(案例 WHEN _235 不为空 THEN '0' ELSE '' 结束,5) 作为 mi_factor1, 圆形(案例 WHEN _235 不为空 THEN '0' ELSE '' 结束,5) 作为 mi_factor2 来自我的数据库

联合

选择 圆形(案例 WHEN _230 不为空 THEN '0' ELSE '' 结束,5) 作为 mi_factor1, 圆形(案例 WHEN _230 不为空 THEN '0' ELSE '' 结束,5) 作为 mi_factor2 FROM los.e

【问题讨论】:

  • 样本数据和期望的结果确实有助于传达您想要做的事情。

标签: mysql


【解决方案1】:

如果您要排除,那么最好有一个 where 子句,其中包含不包含的条件

由于您使用的是 UNION,它会将两个查询的结果集放在一起以进行输出

但是您可以尝试以下在结果集上使用 DISTINCT 函数的方法,因此您只有一行

SELECT DISTINCT mi_factor1,mi_factor2 FROM (

SELECT ROUND(CASE WHEN _235 is not null THEN '0' ELSE '' END,5) AS mi_factor1, ROUND(CASE WHEN _235 is not null THEN '0' ELSE '' END,5) AS mi_factor2 FROM myDataBase

联合

SELECT ROUND(CASE WHEN _230 is not null THEN '0' ELSE '' END,5) AS mi_factor1, ROUND(CASE WHEN _230 is not null THEN '0' ELSE '' END,5) AS mi_factor2 FROM los. e

)

你也可以看看使用 GROUP BY

【讨论】:

    【解决方案2】:

    添加一个过滤器,其中 myColumn 不为空。如果您不想过滤掉数据,请不要使用 case 语句。

    【讨论】:

      【解决方案3】:

      感谢您的所有回答,尤其是在信息有限的情况下,但我能够回答我自己的问题(distinct 和 group by 对我的查询不起作用)。

      它只是在“where”子句中添加了一个额外的“and”行。

      在我上面的场景中,我使用了

      选择 column1、column2 等... 来自我的数据库 这是在哪里 AND _235 不为空

      联合 与上面相同,但 AND 为 _230 不为空

      同样,我没有提供关键信息,您必须做出很多假设。这可能没有任何意义或对任何有相同问题的人增加任何价值,但希望至少有人能从中得到一些东西。后来

      【讨论】:

        猜你喜欢
        • 2021-03-24
        • 2022-10-12
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 2022-12-20
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多