34,838
社区成员




表名是 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社区旺盛一些呢,对小白们也更友好一些呢。
分组+连接
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有没有值来加逗号分隔符