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
你每个子查询都要有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_NUMBER
和CASE
表达式。祝你好运!
【参考方案1】:
你可以使用lag
窗口函数,
select t.id,
case when lag([type]) over(order by id)=[type] then '' else [type] end [Type]
from t
【讨论】:
太棒了!感谢您的快速帮助!以上是关于sql 如何使几个子查询的结果用一列连接起来显示(试过合并、左右连接好像都不行),求大神指导。的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示
sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。