如何解决SQL Server:如何从表创建层次结构组合
我将一个层次结构的级别堆叠在一个表中,我想创建组合。我尝试使用递归查询,但无法弄清楚。我相信必须有一种简单的方法来做到这一点。我具有不同级别的层次结构,具有不同的级别数,因此我不想为每个级别编写代码,而想要查询可处理级别数的查询。我将不胜感激!
以下是创建示例数据的代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [tmp].[tblSample](
[hier] [nvarchar](255) NULL,[lvl] [nvarchar](255) NULL,[id] [int] NULL
) ON [PRIMARY]
GO
INSERT [tmp].[tblSample] ([hier],[lvl],[id]) VALUES (N'AA00010102',N'3',3)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA00019999',4)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA00020107',6)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA00029999',7)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA11810001',9)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA11812087',10)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA11852299',12)
GO
INSERT [tmp].[tblSample] ([hier],[id]) VALUES (N'AA1185',N'2',[id]) VALUES (N'AA',N'1',[id]) VALUES (N'AA1181',[id]) VALUES (N'AA0002',[id]) VALUES (N'AA0001',3)
GO
这是我为该特定层次结构生成所需结果的查询:
SELECT t1.hier,t2.hier,t3.hier FROM tblSample t1
INNER JOIN tblSample t2 ON t1.id=t2.id AND t2.lvl=t1.lvl+1
INNER JOIN tblSample t3 ON t1.id=t3.id AND t3.lvl=t1.lvl+2
样本数据:
所需结果:
解决方法
这对我来说就像是有条件的聚合:
select max(case when lvl = 1 then hier end),max(case when lvl = 2 then hier end),max(case when lvl = 3 then hier end)
from tblSample
group by id;
或者,您也可以将此短语表述为联接:
select s.hier,s2.hier,s3.hier
from tblSample s join
tblSample s2
on s2.lvl = s.lvl + 1 and
s2.id = s.id join
tblSample s3
on s3.lvl = s2.lvl + 1 and
s3.id = s2.id
where s.lvl = 1;
Here是db 小提琴。
,我们还可以使用PIVOT
,但同样,我们必须在数据透视子句中提供一定的最大值level
,并使其动态化,您需要考虑将其转换为{{1} }(不幸的是,我对SQL Server动态SQL不太熟悉)
Dynamic Sql
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。