[小白又出现了呢]帮我看一眼这张表吧,怎样查出我想要的结果呢?

面向"对象"编程 2022-08-12 14:33:10

表名是 FRUIT 水果,里边有几万条数据,如下所示只是一小部分例子,
有这几列 CONTURY 原产国, CITY 产地, NAME 名称, CONTENT 成分, MORE 详情,
每个原产国下有很多产地,每个产地下有很多种水果,每个水果有很多种成分,至于详情,有的有,有的没有。
我想要的结果是,首先 CONTENT与MORE合并一下在一列中显示,用逗号隔开,比如 VITAMIN,B1这样的格式, 至于没有详情的就还是 Ca 不需要加逗号了,然后最重要的一点是去掉重复的内容,比如
这条数据 CHINA   URUMQI   GRAPE   VITAMIN   B1 肉眼可见2条重复的,实际有更多重复的呢。

CONTURY CITY     NAME    CONTENT  MORE
CHINA   URUMQI   GRAPE   Ca        
CHINA   URUMQI   GRAPE   VITAMIN   B1
CHINA   URUMQI   GRAPE   VITAMIN   B2
CHINA   URUMQI   GRAPE   VITAMIN   B1
CHINA   URUMQI   GRAPE   VITAMIN   B2
CHINA   URUMQI   APPLE   Ca
CHINA   BEIJING  APPLE   VITAMIN   B1
CHINA   BEIJING  LEMON   Ca
CHINA   SHANGHAI APPLE   VITAMIN   B1
CHINA   SHANGHAI ORANGE  Ca
USA     NEWYORK  APPLE   VITAMIN   B2
JAPAN   TOKYO    LEMON   Ca
...

我最后要的结果大概是这样的
CONTURY CITY     NAME    CONTENT_MORE
CHINA   URUMQI   GRAPE   Ca        
CHINA   URUMQI   GRAPE   VITAMIN,B1
CHINA   URUMQI   GRAPE   VITAMIN,B2
CHINA   URUMQI   APPLE   Ca
CHINA   BEIJING  APPLE   VITAMIN,B1
CHINA   BEIJING  LEMON   Ca
CHINA   SHANGHAI APPLE   VITAMIN,B1
CHINA   SHANGHAI ORANGE  Ca
USA     NEWYORK  APPLE   VITAMIN,B2
JAPAN   TOKYO    LEMON   Ca
...

如何查询出我想要的结果呢?

p.s.其实数据库是ORACLE的,不过查询方法应该都是通用的吧,而且,这里的人气比ORACLE社区旺盛一些呢,对小白们也更友好一些呢。

...全文
131 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复

select distinct CONTURY, CITY,NAME,case when ifnull(MORE,'')='' then CONTENT else CONTENT || ',' || MORE end as CONTENT_MORE
from FRUIT
大概就是这个样子,我不大懂oracle语法,但是思路就是这个样子的

  • 打赏
  • 举报
回复

我还以为是要拼成VITAMIN,B1,B2这样呢

看你这个需求不就是一个简单的去重+拼接嘛,distinct之后把两列拼接一下呗,顺便判断一下MORE有没有值来加逗号分隔符

  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2022-08-12 14:33
社区公告
暂无公告