给定一个包含以下数据的表:
ID ParentID Level Letter Country City
---------------------------------------------------------
1 NULL 0 A NULL NULL
2 1 1 NULL Afghanistan NULL
3 2 2 NULL NULL Kabul
4 2 2 NULL NULL Kandahar
6 1 1 NULL Australia NULL
7 6 2 NULL NULL Canberra
8 6 2 NULL NULL Sydney
9 NULL 0 B NULL NULL
10 9 1 NULL Belgium NULL
11 10 2 NULL NULL Antwerp
12 10 2 NULL NULL Bruges
13 10 2 NULL NULL Brussels
我可以在一个sql语句中返回以下数据吗?
output$fullscreen_map <- renderLeaflet({
points <- points_reactive()
points %>%
leaflet() %>%
addTiles() %>%
fitBounds(~min(lon), ~min(lat), ~max(lon), ~max(lat)) %>%
registerPlugin(textPathPlugin) %>%
onRender("function(el, x, data) {
data = HTMLWidgets.dataframeToD3(data);
data = data.map(function(val) { return [val.lat, val.lon]; });
var layer = L.polyline(data);
layer.on('mouseover', function () {
this.setText(' ► ', {repeat: true, attributes: {fill: 'blue'}});
});
layer.on('mouseout', function () {
this.setText(null);
});
layer.addTo(this);
}", data = points)
})
答案 0 :(得分:3)
Declare @YourTable table (Country varchar(50), City varchar(50))
Insert Into @YourTable values
('Afghanistan','Kabul'),
('Afghanistan','Kandahar'),
('Australia' ,'Canberra'),
('Australia' ,'Sydney'),
('Belgium' ,'Antwerp'),
('Belgium' ,'Bruges'),
('Belgium' ,'Brussels')
; with cte0 as (
Select Lvl0 = cast(Left(Country,1) as varchar(50))
,Lvl1 = cast(Country as varchar(50))
,Lvl2 = cast(City as varchar(50))
,ID0 = Dense_Rank() over (Order By Left(Country,1))
,ID1 = Dense_Rank() over (Order By Country) + 100
,ID2 = Dense_Rank() over (Order By City) + 10000
From @YourTable
)
Select Distinct ID=ID0,ParentID=null,Level=0,Letter=Lvl0,Country=null,City=null,Path=concat('',Lvl0) from cte0
Union All
Select Distinct ID=ID1,ParentID=ID0,Level=1,Letter=null,Country=Lvl1,City=null,Path=concat('',Lvl0,' > ',Lvl1) from cte0
Union All
Select Distinct ID=ID2,ParentID=ID1,Level=2,Letter=null,Country=null,City=Lvl2,Path=concat('',Lvl0,' > ',Lvl1,' > ',Lvl2) from cte0
Order By Path
<强>返回强>