sql 如何使几个子查询的结果用一列连接起来显示(试过合并、左右连接好像都不行),求大神指导。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 如何使几个子查询的结果用一列连接起来显示(试过合并、左右连接好像都不行),求大神指导。相关的知识,希望对你有一定的参考价值。

具体如下所示:/*测试数据
create table tb(xz varchar(10) , lx varchar(10) ,bz varchar(10),bh int)
insert into tb values('x1' , '1' , '33', 74)
insert into tb values('x1' , '2', '34' , 83)
insert into tb values('x1' , '3' , '33', 93)
insert into tb values('x1' , '1' , '33', 84)
insert into tb values('x1' , ' ' , '33', 94)
insert into tb values('x2' , '1' , '34', 99)
create table tb1(lx varchar(10) , b2 varchar(10) )
insert into tb1 values('1' , 'zy')
insert into tb1 values('2' , 'mz')
insert into tb1 values('3' , 'wy')
*/
SELECT ---子查询1
tb.xz as 小组,tb1.B2 as 类型, count(tb.bh) as 总数
FROM tb
LEFT OUTER JOIN tb1 ON tb.lx = tb1.lx
group by tb.xz,tb1.B2;
SELECT ---子查询2
tb.xz as 小组,tb1.B2 as 类型, count(tb.bh) as '33总数'
FROM tb
LEFT OUTER JOIN tb1 ON tb.lx = tb1.lx
WHERE BZ='33'
group by tb.xz,tb1.B2;
SELECT ---子查询3
tb.xz as 小组,tb1.B2 as 类型, count(tb.bh) as '34总数'
FROM tb
LEFT OUTER JOIN tb1 ON tb.lx = tb1.lx
WHERE BZ='34'
group by tb.xz,tb1.B2;
----------想变成这样---------
小组 类型 总数 33总数 34总数
x1 NULL 1 1 NULL
x1 mz 1 NULL 1
x1 wy 1 1 NULL
x1 zy 2 2 NULL
x2 zy 1 NULL 1

参考技术A 这样合并就是用union/union all .
你每个子查询都要有5列的结果。才会这样显示,你现在是3列合并后还是3列。
参考技术B 试试以下SQL语句能否满足你的要求:
select A.小组,A.类型,B.总数,A.子类型,A.子类型总数 from
(select tb.xz as 小组,tb1.b2 as 类型,tb.bz as 子类型,count(tb.bz) as 子类型总数
from tb left join tb1 on tb.lx=tb1.lx
group by tb.xz,tb1.b2,tb.bz
order by 子类型) A left join (select tb.xz as 小组,tb1.b2 as 类型,count(tb.xz) as 总数
from tb left join tb1 on tb.lx=tb1.lx
group by tb.xz,tb1.b2) B
on A.小组=B.小组 and (A.类型=B.类型 or (A.类型 is null and B.类型 is null))
order by A.小组,A.类型,A.子类型

不建议33总数和34总数横着放,因为我觉得你还可能出现35总数或36总数等等,这样,列数就不固定了,根本写不出这样的语句,如果坚着放,你就可以无限扩大bz的种类。

运行结果如下:

小组 类型 总数 子类型 子类型总数
x1 mz 1 34 1
x1 wy 1 33 1
x1 zy 2 33 2
x1 1 33 1
x2 zy 1 34 1

以上还有疑问,可以Hi我。本回答被提问者和网友采纳
参考技术C 使用pivot试试

如何始终只显示 SQL 查询结果表中相同值的第一个值?

【中文标题】如何始终只显示 SQL 查询结果表中相同值的第一个值?【英文标题】:How to display always just the first value from the same values in a result table of an SQL query? 【发布时间】:2021-12-22 23:47:17 【问题描述】:

我有一个选择查询,它在一列中返回许多相同的有序值。

看起来像这样:

Id Type
1 A
2 A
3 A
4 B
5 B
6 C
7 C
8 C

但我喜欢这样显示:

Id Type
1 A
2
3
4 B
5
6 C
7
8

感谢您的建议!

【问题讨论】:

看看ROW_NUMBERCASE 表达式。祝你好运! 【参考方案1】:

你可以使用lag窗口函数

select t.id, 
    case when lag([type]) over(order by id)=[type] then '' else [type] end [Type]
from t

【讨论】:

太棒了!感谢您的快速帮助!

以上是关于sql 如何使几个子查询的结果用一列连接起来显示(试过合并、左右连接好像都不行),求大神指导。的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示

sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。

求高手帮忙sql写法:树节点放一个表中,怎么用一条语句查询一个节点及对应的所有父节点信息。

如何始终只显示 SQL 查询结果表中相同值的第一个值?

sql查询 表中一列不重复 显示多列

SQL中如何统计查询结果中某一列重复值的个数?