如何省略 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 值 pre
、sze
、fdm_pre
、val
任何 fdm_pre 值列出,即 (1,2,3,4)。但是,当 fdm_pre
为 1 时,我只关心 pre
和 size
值。
我可以写一个查询,例如
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 所有列通常更有效吗,即使它们未被使用?或者,像第二个查询那样做一些条件检查会更好吗? pre
和 sze
列是整数值。
所有未使用的列 return 效率不高,特别是未使用的列非常大时(BLOB
、CLOB
、TEXT
, ARRAY
, 等等).
在您的特定示例中,列“not returned”是小列(以字节为单位),因此如果您生成空值并不重要。
我认为保持查询简单易读很重要。我建议您 return 所有相关列(可能有用)并在应用程序逻辑方面处理这两个列使用选项。
您可以使用执行字符串来代替这种脚本。以这种方式,您想要的列应该放在字符串中,并且使用 if 语句您可以决定显示哪一列,哪一列不是必需的。
如果你需要,我可以给你做一个样品。
举个例子:
select
pre, sze, fdm_pre, val
from
form_data_stage
where
fdm_pre in (1,2,3,4)
order by
pre;
这将为所有列 return 值 pre
、sze
、fdm_pre
、val
任何 fdm_pre 值列出,即 (1,2,3,4)。但是,当 fdm_pre
为 1 时,我只关心 pre
和 size
值。
我可以写一个查询,例如
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 所有列通常更有效吗,即使它们未被使用?或者,像第二个查询那样做一些条件检查会更好吗? pre
和 sze
列是整数值。
所有未使用的列 return 效率不高,特别是未使用的列非常大时(BLOB
、CLOB
、TEXT
, ARRAY
, 等等).
在您的特定示例中,列“not returned”是小列(以字节为单位),因此如果您生成空值并不重要。
我认为保持查询简单易读很重要。我建议您 return 所有相关列(可能有用)并在应用程序逻辑方面处理这两个列使用选项。
您可以使用执行字符串来代替这种脚本。以这种方式,您想要的列应该放在字符串中,并且使用 if 语句您可以决定显示哪一列,哪一列不是必需的。 如果你需要,我可以给你做一个样品。