求查询语句,非常感谢!

dsp_zerg 2016-06-15 10:36:51
求一查询预计,想了好几天了。
使用了一次分组重新序号,但还是没弄出来。
A表
id a1

B表
id b1
id b2

C表
id c1
id c2
id c3

希望出现的结果:
id a1 b1 c1
b2 c2
c3
如果出现不了上面这个结果,下面这个也可以接受。(我只会弄出A和B的结果。C的弄不出来)非常感谢!!
id a1 b1
b2
c1
c2
c3

...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
-小蕾- 2016-06-16
  • 打赏
  • 举报
回复

WITH A(id,content) AS(
SELECT 1,'a1'
),
B(id,content) AS(
SELECT 1,'b1'UNION ALL         
SELECT 2,'b2'
),
C(id,content) as(
SELECT 1,'c1' UNION ALL          
SELECT 2,'c2' UNION ALL     
SELECT 3,'c3'
) 

select T1.id,conA,conB,Tc.content as conC from (
select TA.id,TA.content as conA,TB.content as conB,TA.num,TB.num1 from (
select *,ROW_NUMBER() over(order by id) as num from A) as TA 
right join
(select *,ROW_NUMBER() over(order by id) as num1 from B) as TB
on TA.num=TB.num1
) as T1
right join 
(select *,ROW_NUMBER() over(order by id) as num2 from C) as TC
on T1.num=TC.num2
中国风 2016-06-16
  • 打赏
  • 举报
回复
如果表记录时是递增的,可这样实现 use Tempdb go --> --> declare @A table([id] int,[A] nvarchar(22)) Insert @A select 1,N'a1' declare @B table([id] int,[B] nvarchar(22)) Insert @B select 1,N'b1' union all select 1,N'b2' declare @C table([id] int,[C] nvarchar(22)) Insert @C select 1,N'c1' union all select 1,N'c2' union all select 1,N'c3'

SELECT ISNULL(RTRIM(a.Id),'') AS id,ISNULL(a.A,'') AS A,ISNULL(b.B,'') AS B,ISNULL(c.C,'') AS C FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY ID ORDER BY RAND()) AS RN FROM @A) AS a RIGHT JOIN(SELECT *,ROW_NUMBER()OVER(PARTITION BY ID ORDER BY RAND()) AS RN FROM  @B) AS b ON a.ID=b.ID AND a.RN=b.RN RIGHT JOIN (SELECT*,ROW_NUMBER()OVER(PARTITION BY ID ORDER BY RAND()) AS RN FROM @C) AS c ON c.ID=b.ID AND c.RN=b.RN
/*
id	A	B	C
1	a1	b1	c1
		b2	c2
			c3
			*/
xdashewan 2016-06-16
  • 打赏
  • 举报
回复
没有表间关系,无法解答
卖水果的net 2016-06-16
  • 打赏
  • 举报
回复

-- NULL值,你自己按实际业务处理一下;
create table A(id int , name varchar(10))
create table B(id int , name varchar(10))
create table C(id int , name varchar(10))
insert into A values(100,'a1');
insert into B values(1,'b1'),(2,'b2');
insert into C values(1,'c1'),(2,'c2'),(3,'c3');
with A1 as(
select row_number() over(order by getdate()) rn , *  from A 
),
B1 as(
select row_number() over(order by getdate()) rn , *  from B 
),
C1 as(
select row_number() over(order by getdate()) rn , *  from C 
)
select A1.name , B1.name,C1.name 
from A1 
full join B1 on A1.rn = B1.rn
full join C1 on isnull(A1.rn,B1.rn) = C1.rn
go

drop table A,B,C
go


(1 行受影响)

(2 行受影响)

(3 行受影响)
name       name       name
---------- ---------- ----------
a1         b1         c1
NULL       b2         c2
NULL       NULL       c3

(3 行受影响)


22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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