首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用字符表示和值的case语句

使用字符表示和值的case语句
EN

Database Administration用户
提问于 2020-05-20 09:03:02
回答 2查看 512关注 0票数 1

我有一个表,我正试图在select上提取一个返回值,表示启用或禁用表上的压缩,或者使用对压缩列值使用和计算器的方式禁用,必须是否,auto_compressed必须等于禁用。

下面是表中的示例数据:

代码语言:javascript
复制
partnum          1048577
dbsname          rootdbs
owner            informix
tabname          sysdatabases
collate
dbsnum           1
compressed       No
auto_compressed  Disabled

partnum          1048577
dbsname          rootdbs
owner            informix
tabname
collate          TBLSpace
dbsnum           1
compressed       No
auto_compressed  Disabled

partnum          1048577
dbsname          rootdbs
owner            informix
tabname          sysdatabases
collate
dbsnum           1
compressed       No
auto_compressed  Enabled

partnum          1048577
dbsname          rootdbs
owner            informix
tabname          sysdatabases
collate
dbsnum           1
compressed       Yes
auto_compressed  Disabled

您可以使用下面的内容来测试:

代码语言:javascript
复制
create table test (
partnum         varchar(255),
dbsname         varchar(255),
owner           varchar(255),
tabname         varchar(255),
collate         varchar(255),
dbsnum          varchar(255),
compressed      varchar(255),
auto_compressed varchar(255));

insert into test values ('1048577','rootdbs','informix','','TBLSpace','1','No','Disabled');
insert into test values ('1048577','rootdbs','informix','sysdatabases','','1','No','Disabled');
insert into test values ('1048577','rootdbs','informix','sysdatabases','','1','No','Enabled');
insert into test values ('1048577','rootdbs','informix','sysdatabases','','1','Yes','Disabled');

我只想在一天结束时确定是否对数据库中的所有记录进行压缩=否或auto_compressed =禁用,然后只需要一个返回,表示已禁用或启用。

我把这些放在一起,但我很难用价值来代替数字:

代码语言:javascript
复制
select
sum(case when Compressed != 'No' OR auto_compressed != 'Disabled' then 'Enabled' else 'Disabled' end) as Condition
from test

我收到以下错误消息:

代码语言:javascript
复制
367: Sums and averages cannot be computed for character columns.

我可以用数字替换值,它的工作原理如下:

代码语言:javascript
复制
select
sum(case when Compressed != 'No' OR auto_compressed != 'Disabled' then 1 else 0 end) as seven
from test

我相信我的案例陈述是不正确的,或者有一个更好的方法这样做。我确实需要帮助,因为我的头脑在这一点上摇摆不定。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-05-20 09:35:55

测试

代码语言:javascript
复制
SELECT CASE SUM(CASE WHEN Compressed = 'Yes' AND auto_compressed = 'Compressed'
                     THEN 1 
                     ELSE 0 
                     END)
       WHEN 0 THEN 'Disabled'
       ELSE        'Enabled'
       END AS Condition
FROM test
票数 1
EN

Database Administration用户

发布于 2020-05-20 09:53:27

这也起作用,我看到:

代码语言:javascript
复制
select 
case when seven > 0 then 'Enabled' else 'Disabled' end) as Compression
from (
select
sum(case when Compressed != 'No' OR auto_compressed != 'Disabled' then 1 else 0 end) as seven
from test
) a
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/267510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档