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

How to omit columns for specific rows in SQL?

举个例子:

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

这将为所有列 return 值 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;

但是,有没有一些标准的方法来处理这种情况? return 所有列通常更有效吗,即使它们未被使用?或者,像第二个查询那样做一些条件检查会更好吗? presze 列是整数值。

所有未使用的列 return 效率不高,特别是未使用的列非常大时(BLOBCLOBTEXT , ARRAY, 等等).

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

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

您可以使用执行字符串来代替这种脚本。以这种方式,您想要的列应该放在字符串中,并且使用 if 语句您可以决定显示哪一列,哪一列不是必需的。 如果你需要,我可以给你做一个样品。