sql 如何使几个子查询的结果用一列连接起来显示(试过合并、左右连接好像都不行),求大神指导。
具体如下所示:/*测试数据createtabletb(xzvarchar(10),lxvarchar(10),bzvarchar(10),bhint)insertinto...
具体如下所示:/*测试数据
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 展开
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 展开
3个回答
展开全部
这样合并就是用union/union all .
你每个子查询都要有5列的结果。才会这样显示,你现在是3列合并后还是3列。
你每个子查询都要有5列的结果。才会这样显示,你现在是3列合并后还是3列。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试以下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我。
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我。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用pivot试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询