3
你好,我有SQL中的树结构。逻辑是标准的:SomeID,ParentID,其他字段。 我有选择过程,该过程是这样选择的数据:SQL选择倒转树
1.
1.1
1.1.1
等。
如何写的选择过程,以获得反相后的结果(第一选择最深的分支,最后 - 根树枝),像这样:
1.1.1.
1.1.
1.
2.2.2.2.2.
2.2.2.2.
2.2.2.
2.2.
2.
等。
非反演选择看起来像THI(我用的SqlServer 2008)S:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Object_SelectDownByRoot]
@ObjectID int
AS
WITH tree (ObjectID, ParentID, ObjectName, ObjectCode, DistrictID, DistrictName,
CityName, RegionName, StreetName, StreetID, AddressID, ObjectTypeName,
RouteName, ObjectTypeID, RouteID, AvrgTempIn, Area, Volume,
ElectricPower, ObjectStatusName, ObjectStatusID, [ControlRoom?], DateBuild,
[Floor], EncloseName, EncloseID, MaintenanceEval, AdministratorID,
Administrator, ElectricityPerson, ElectricityPersonID,
HeatingPersonID, HeatingPerson, HouseNo, FlatNo, ZIP,
AddressStreet, RouteCode, RouteDescription,
AddressDescription, StreetID2, CityID, AddressCityName) AS
(
SELECT
ObjectID, ParentID, ObjectName, ObjectCode, DistrictID, DistrictName,
CityName, RegionName, StreetName, StreetID, AddressID, ObjectTypeName,
RouteName, ObjectTypeID, RouteID, AvrgTempIn, Area, Volume,
ElectricPower, ObjectStatusName, ObjectStatusID, [ControlRoom?], DateBuild,
[Floor], EncloseName, EncloseID, MaintenanceEval, AdministratorID,
Administrator, ElectricityPerson, ElectricityPersonID,
HeatingPersonID, HeatingPerson, HouseNo, FlatNo, ZIP,
AddressStreet, RouteCode, RouteDescription,
AddressDescription, StreetID2, CityID, AddressCityName
FROM dbo.[ObjectQ] ofs
WHERE(ObjectID = @ObjectID)
UNION ALL
SELECT ofs.ObjectID, ofs.ParentID, ofs.ObjectName, ofs.ObjectCode, ofs.DistrictID, ofs.DistrictName,
ofs.CityName, ofs.RegionName, ofs.StreetName, ofs.StreetID, ofs.AddressID, ofs.ObjectTypeName,
ofs.RouteName, ofs.ObjectTypeID, ofs.RouteID, ofs.AvrgTempIn, ofs.Area, ofs.Volume,
ofs.ElectricPower, ofs.ObjectStatusName, ofs.ObjectStatusID, ofs.[ControlRoom?], ofs.DateBuild,
ofs.[Floor], ofs.EncloseName, ofs.EncloseID, ofs.MaintenanceEval, ofs.AdministratorID,
ofs.Administrator, ofs.ElectricityPerson, ofs.ElectricityPersonID,
ofs.HeatingPersonID, ofs.HeatingPerson, ofs.HouseNo, ofs.FlatNo, ofs.ZIP,
ofs.AddressStreet, ofs.RouteCode, ofs.RouteDescription,
ofs.AddressDescription, ofs.StreetID2, ofs.CityID, ofs.AddressCityName
FROM dbo.[ObjectQ] ofs
JOIN tree ON tree.ObjectID = ofs.ParentID
)
SELECT
ObjectID, ParentID, ObjectName, ObjectCode, DistrictID, DistrictName,
CityName, RegionName, StreetName, StreetID, AddressID, ObjectTypeName,
RouteName, ObjectTypeID, RouteID, AvrgTempIn, Area, Volume,
ElectricPower, ObjectStatusName, ObjectStatusID, [ControlRoom?], DateBuild,
[Floor], EncloseName, EncloseID, MaintenanceEval, AdministratorID,
Administrator, ElectricityPerson, ElectricityPersonID,
HeatingPersonID, HeatingPerson, HouseNo, FlatNo, ZIP,
AddressStreet, RouteCode, RouteDescription,
AddressDescription, StreetID2, CityID, AddressCityName
FROM tree
你能发表你正在用来选择regualar(非倒置)树的查询吗?你使用的是哪个数据库?做一个谷歌搜索递归查询,虽然技术不同数据库之间。 – FrustratedWithFormsDesigner 2010-02-10 14:32:54
我编辑了帖子并发布了原始查询 – Vytas999 2010-02-10 15:20:58
如果您从原始查询中删除不重要的字段,这可能会有所帮助。它会澄清你从哪里获得1,1.1,1.1等。 – 2010-02-11 14:28:12