如何省略 SQL 中特定行的列?

Posted

技术标签:

【中文标题】如何省略 SQL 中特定行的列?【英文标题】:How to omit columns for specific rows in SQL? 【发布时间】:2021-10-15 19:15:12 【问题描述】:

举个例子:

select 
    pre, sze, fdm_pre, val
from 
    form_data_stage
where 
    fdm_pre in (1,2,3,4) 
order by 
    pre;

这将为所有列 preszefdm_preval 返回列出的任何 fdm_pre 值的值,即 (1,2,3,4)。但是,我只关心 fdm_pre 为 1 时的 presize 值。

我可以写一个查询,比如

select 
    case when fdm_pre = 1 then pre else null end as pre, 
    case when fdm_pre = 1 then sze else null end as sze,
    fdm_pre,
    val
from 
    form_data_stage 
where 
    fdm_pre in (1,2,3,4) 
order by 
    pre;

但是,有一些标准的方法来处理这种情况吗?即使不使用它们,返回所有列通常更有效吗?或者,在第二个查询中进行一些条件检查会更好吗? presze 列是整数值。

【问题讨论】:

您使用的是什么 DBMS?选择中的条件逻辑对您没有多大好处,重要的是行处理。这个查询非常简单,唯一跳出来的就是索引 fdm_pre。 @Error_2646 Oracle 19.3.0 【参考方案1】:

返回所有未使用的列效率不高,特别是如果未使用的列很大(BLOBCLOBTEXTARRAY 等)。

在您的特定示例中,“未返回”列是小列(以字节为单位),因此您是否生成空值并不重要。

【讨论】:

【参考方案2】:

您可以使用执行字符串代替这种脚本。这样,您希望的列应该放在字符串中,并且使用 if 语句,您可以决定显示哪一列,哪一列是不必要的。 如果您需要,我可以为您制作样品。

【讨论】:

【参考方案3】:

我认为保持查询简单明了很重要。我建议您返回所有相关列(可能有用)并在应用程序逻辑方面处理这两个列使用选项。

【讨论】:

以上是关于如何省略 SQL 中特定行的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在radgrid中查找所选行的列值

当 SQL Server 表中的列“createdDate”从现在起经过 90 天后,如何更新其具有数百万行的列?我们可以使用触发器吗?

如何在特定列之后添加 SQL 中的列?

如何在 Oracle Sql Developer 中选择特定的列标题

如何从 SQL 中的列值中提取特定部分(Redshift 平台)

Rails/SQL:如何在特定 id 上查找最频繁的列值