首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个记录时的SQL情况

多个记录时的SQL情况
EN

Stack Overflow用户
提问于 2021-06-16 06:00:05
回答 4查看 142关注 0票数 0

我有4个国家专栏,跟踪在特定地区的书籍。例如,EN='Y',GE='N',等等。我正在创建一个视图,并希望在“可用国家”列中添加每个记录。因此,如果EN='Y‘和GE='Y’,它会把它们列为'en,ge‘在可用的国家。到目前为止,我得到的是:

代码语言:javascript
运行
复制
case 
   when EN = 'Y' and GE = 'Y' 
      then 'EN, GE' 
   when EN = 'N' and GE = 'Y' 
      then 'GE' 
end as 'available country'

这是可行的,但我有4多列,可能会添加更多,定义每个条件感觉不够。

是否有更好的方法来连接值而不是指定每个条件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-06-16 06:05:58

您可以将CONCAT_WSCASE表达式一起使用:

代码语言:javascript
运行
复制
SELECT CONCAT_WS(',', CASE WHEN EN = 'Y' THEN 'EN' END,
                      CASE WHEN GE = 'Y' THEN 'GE' END,
                      ...) AS "available country"
FROM yourTable;

但是一个更好的桌子设计应该是这样的:

代码语言:javascript
运行
复制
id | language | val
1  | EN       | Y
1  | GE       | N

使用此设计,您可以简单地通过id进行聚合,并只对那些具有yes值的语言进行筛选,例如:

代码语言:javascript
运行
复制
SELECT id, ARRAY_AGG(language)
FROM yourTable
WHERE val = 'Y'
GROUP BY id;
票数 1
EN

Stack Overflow用户

发布于 2021-06-16 06:07:49

您可以将列转换为行(首先它们应该是什么),然后使用string_agg()获得逗号分隔的列表:

代码语言:javascript
运行
复制
select t.id, f.*
from the_table t
  cross join lateral (
    select string_agg(colname, ',') as available_countries
    from (  
      values (en, 'EN'), 
             (ge, 'GE'), 
             (de, 'DE'), 
             (fr, 'FR')
    ) x(flag, colname)
    where flag = 'Y'
  ) as f
票数 0
EN

Stack Overflow用户

发布于 2021-06-16 06:27:48

不幸的是,我认为当您使用当前数据库设计时,您将不得不使用CASE。请检查一下这个是否适合你。

代码语言:javascript
运行
复制
select TRIM(BOTH ',' FROM c1_new||c2_new||c3_new||c4_new) as concat_col
from 
(
    select case when c1 = 'Y' then 'C1,' else null end as c1_new,
           case when c2 = 'Y' then 'C2,' else null end as c2_new,
           case when c3 = 'Y' then 'C3,' else null end as c3_new,
           case when c4 = 'Y' then 'C4'      else null end as c4_new
    from   TABLE
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67997137

复制
相关文章

相似问题

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