我有一个像下面这样的平面数据结构,我想创建一个树。
----City------------------------State --------Land Area
------------------------------------------
1--------Sitka------------- Alaska--------2,870.30
2--------Juneau----------- Alaska--------2,701.90
3--------Wrangell-----------Alaska--------2,541.50
4--------Anchorage---------Alaska--------1,704.70
5--------Jacksonville--------Florida--------747
6--------Anaconda--------------------------------736.5
7--------Butte----------------------------------------716.2
8--------Oklahoma City------------------------601.11
9--------Houston--------------------------------599.6
10-------Nashville--------------------------------527.9
11-------Phoenix--------------------------------516.7
12-------Los Angeles-----------------------468.7
13-------San Antonio--------Texas--------460.9
14-------Suffolk **----------Virginia--------400.2
15-------Buckeye--------------------------------375.3
16-------Indianapolis--------------------------------361.4
17-------Chesapeake **-----Virginia--------340.8
18-------Dallas--------------Texas--------340.5
19-------Fort Worth---------Texas--------339.8
20-------Louisville-------------------------------325.2
21-------San Diego--------------------------------325.2
22-------Memphis--------------------------------315.1
23-------Kansas City--------------------------------313.5
24-------New York City------------------------302.6
25-------Augusta--------------------------------302.5
26-------Austin----------------Texas--------297.9
树应如下所示 它应该打印城市和土地面积 如果城市国家存在,则应首先显示州,然后城市和土地面积将是该城市的子女,类似于以下结构。
Alaska----------------9818.4
--------Anchorage--------1704.7
--------Juneau--------2701.9
--------Sitka--------2870.3
--------Wrangell--------2541.5
Florida----------------747
--------Jacksonville--------747
Texas----------------1439.1
--------Austin--------297.9
--------Dallas--------340.5
--------Fort Worth--------339.8
--------San Antonio--------460.9
Virginia Total----------------741
--------Chesapeake **--------340.8
--------Suffolk **--------400.2
Anaconda----------------736.5
Augusta----------------302.5
Buckeye----------------375.3
Butte----------------716.2
Houston----------------599.6
Indianapolis----------------361.4
Kansas City----------------313.5
Los Angeles----------------468.7
Louisville----------------325.2
Memphis----------------315.1
Nashville----------------527.9
New York City----------------302.6
Oklahoma City----------------601.11
Phoenix----------------516.7
San Diego----------------325.2
请通过撰写查询告诉我如何实现这一目标。
答案 0 :(得分:0)
试试这个
declare @StateArea TABLE ( SNo int ,City varchar(50) ,[State] varchar(50) , area float)
insert into @StateArea values ( 1,'Sitka' ,'Alaska', 2870.30 )
insert into @StateArea values ( 2, 'Juneau' ,'Alaska', 2701.90)
insert into @StateArea values ( 3, 'Wrangell' ,'Alaska', 2541.50)
insert into @StateArea values ( 4, 'Anchorage' ,'Alaska', 1704.70)
insert into @StateArea values ( 5, 'Jacksonville' ,'Florida', 747 )
insert into @StateArea values ( 6, 'Anaconda', NULL , 736.5 )
insert into @StateArea values ( 7, 'Butte', NULL , 716.2 )
insert into @StateArea values (8, 'Oklahoma City',NULL , 601.11 )
insert into @StateArea values (9, 'Houston' , NULL , 599.6 )
insert into @StateArea values (10, 'Nashville', NULL , 527.9 )
insert into @StateArea values (11, 'Phoenix' , NULL , 516.7 )
insert into @StateArea values (12, 'Los Angeles', NULL , 468.7)
insert into @StateArea values (13, 'San Antonio' ,'Texas', 460.9)
insert into @StateArea values (14, 'Suffolk **' ,'Virginia', 400.2)
insert into @StateArea values (15, 'Buckeye' ,NULL ,375.3)
insert into @StateArea values (16, 'Indianapolis' ,NULL , 361.4 )
insert into @StateArea values (17, 'Chesapeake **' ,'Virginia', 340.8 )
insert into @StateArea values (18, 'Dallas' ,'Texas', 340.5 )
insert into @StateArea values (19, 'Fort Worth' ,'Texas', 339.8)
insert into @StateArea values (20, 'Louisville' ,NULL , 325.2 )
insert into @StateArea values (21, 'San Diego' , NULL , 325.2 )
insert into @StateArea values (22, 'Memphis', NULL , 315.1 )
insert into @StateArea values (23, 'Kansas City' , NULL , 313.5)
insert into @StateArea values (24, 'New York City', NULL , 302.6 )
insert into @StateArea values (25,'Augusta' , NULL , 302.5 )
insert into @StateArea values (26,'Austin' ,'Texas', 297.9)
select [State],City,area from
(
select isnull([State],City) as [State],null as City,sum(area) as area
,case when [State] is not null then 0 else 1 end as sort from @StateArea
group by isnull([State],City),case when [State] is not null then 0 else 1 end
union all
select [State] ,City,area ,case when [State] is not null then 0 else 1 end as sort
from @StateArea
where [State] is not null
) t
order by sort,[State],City