新人第一次发帖,有关sql union

ystemni 2010-03-27 03:16:40
目前有一张人员表,要求查询后按种类进行统计,第一列是种类名,第二列是人数,第三列是每人的姓名。
我写了如下语句:
select xm as 种类名称,count (xm) as 人数,xm as 简要说明
from ryxx
where 1=0
group by xm
union
select distinct('种类一'),
(select nvl(count(distinct(xm)),0) from ryxx where 条件一),
(select replace(WMSYS.WM_CONCAT(distinct(xm)), ',', '、')from ryxx where 条件一)
from ryxx
union
select distinct('种类二'),
(select nvl(count(xm),0) from ryxx where 条件二),
(select replace(WMSYS.WM_CONCAT(xm), ',', '、')from ryxx where 条件二)
from ryxx

ryxx是表名(人员信息),xm是字段名(姓名)。
现在的问题是,如果按条件一或条件二过滤后没有结果,那么执行后的记录中就不会出现
“种类一 0 NULL”的记录,如何修改才能让查询无记录后也能显示?
...全文
141 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ystemni 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 47522341 的回复:]
那就用子查询。
用一个确认有数据的条件查询出distinct 种类 作为关联查询的基础表。
[/Quote]
就是我说的那个笨办法。
算啦结帖了。
47522341 2010-03-27
  • 打赏
  • 举报
回复
那就用子查询。
用一个确认有数据的条件查询出distinct 种类 作为关联查询的基础表。
ystemni 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 47522341 的回复:]
用表示种类的基础表左关联人员信息表了。
[/Quote]
主要是没有这种表,新建一张也不合适,因为种类是动态的。
47522341 2010-03-27
  • 打赏
  • 举报
回复
用表示种类的基础表左关联人员信息表了。
ericyp1984 2010-03-27
  • 打赏
  • 举报
回复
upupuppupupupup
ystemni 2010-03-27
  • 打赏
  • 举报
回复
我已经想到一个笨办法解决它了,那就手动往表里插入一些记录,然后利用主键定位,这样可以确保不会丢失。

但我不想用这种绕弯的办法,想听听各位的建议。
ystemni 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java3344520 的回复:]
select '种类一',
(select nvl(count(distinct(xm)),0) from ryxx where 条件一),
(select replace(WMSYS.WM_CONCAT(distinct(xm)), ',', '、')from ryxx where 条件一)
from ryxx
这样行不,试试。表束不清晰啊
[/Quote]

不行,假如符合种类一的记录没有,那么仍然不显示;
假如符合种类一的记录有两条,那么记录就是
种类名称 人数 简要说明
种类一 2 AA、BB
种类一 2 AA、BB
种类二...
iqlife 2010-03-27
  • 打赏
  • 举报
回复
select '种类一',
(select nvl(count(distinct(xm)),0) from ryxx where 条件一),
(select replace(WMSYS.WM_CONCAT(distinct(xm)), ',', '、')from ryxx where 条件一)
from ryxx
这样行不,试试。表束不清晰啊

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧