Sql server 在sql中重新排列逗号分隔的值
嗨,我有两张桌子一张桌子有县信息 另一个有行数据 乡村餐桌看起来像Sql server 在sql中重新排列逗号分隔的值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,嗨,我有两张桌子一张桌子有县信息 另一个有行数据 乡村餐桌看起来像 Country_ID Region_ID Country_Name Abbreviation Priority ----------- ----------- ------------------------- ------------ ----------- 1 1 United States USA 1 2
Country_ID Region_ID Country_Name Abbreviation Priority
----------- ----------- ------------------------- ------------ -----------
1 1 United States USA 1
2 1 US USA 1
3 1 Canada CA 2
4 2 United Kingdom UK 1
5 2 Germany DE 1
6 2 France FR 1
7 2 Italy IT 1
8 2 Spain ES 1
9 2 The Netherlands NL 1
10 2 Poland PL 2
11 2 Russia RU 2
而RowData就像
Tr_ID Countrys
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
729541 Germany,United Kingdom
729553 Italy,Poland,Russia,Spain
729580 Austria,Finland,France,Germany,Ireland,Italy,Poland,Portugal,Romania,Russia,Slovakia,Spain,Sweden,Switzerland,The Netherlands,United Kingdom
729726 Italy,Spain,United Kingdom
729737 Austria,United Kingdom
我想根据county表中给出的优先级重新排列county的in
优先1县应首先发生扩孔,然后用逗号重复
请帮我做这个
谢谢
MS SQL Server 2008架构设置:
create table Country
(
Country_ID int,
Region_ID int,
Country_Name varchar(25),
Abbreviation varchar(5),
Priority int
);
insert into Country values
(1 , 1, 'United States', 'USA', 1),
(2 , 1, 'US', 'USA', 1),
(3 , 1, 'Canada', 'CA ', 2),
(4 , 2, 'United Kingdom', 'UK ', 1),
(5 , 2, 'Germany', 'DE ', 1),
(6 , 2, 'France', 'FR ', 1),
(7 , 2, 'Italy', 'IT ', 1),
(8 , 2, 'Spain', 'ES ', 1),
(9 , 2, 'The Netherlands', 'NL ', 1),
(10, 2, 'Poland', 'PL ', 2),
(11, 2, 'Russia', 'RU ', 2)
create table RowData
(
Tr_ID int,
Countrys varchar(200)
)
insert into RowData values
(729541, 'Germany,United Kingdom'),
(729553, 'Italy,Poland,Russia,Spain'),
(729580, 'Austria,Finland,France,Germany,Ireland,Italy,Poland,Portugal,Romania,Russia,Slovakia,Spain,Sweden,Switzerland,The Netherlands,United Kingdom'),
(729726, 'Italy,Spain,United Kingdom'),
(729737, 'Austria,United Kingdom')
select R.Tr_ID,
(
select ','+C.Country_Name
from Country as C
where ','+R.Countrys+',' like '%,'+C.Country_Name+',%'
order by C.Priority
for xml path(''), type
).value('substring(text()[1], 2)', 'varchar(200)') as Countrys
from RowData as R
| TR_ID | COUNTRYS |
------------------------------------------------------------------------------------
| 729541 | United Kingdom,Germany |
| 729553 | Italy,Spain,Poland,Russia |
| 729580 | United Kingdom,Germany,France,Italy,Spain,The Netherlands,Poland,Russia |
| 729726 | United Kingdom,Italy,Spain |
| 729737 | United Kingdom |
查询1:
create table Country
(
Country_ID int,
Region_ID int,
Country_Name varchar(25),
Abbreviation varchar(5),
Priority int
);
insert into Country values
(1 , 1, 'United States', 'USA', 1),
(2 , 1, 'US', 'USA', 1),
(3 , 1, 'Canada', 'CA ', 2),
(4 , 2, 'United Kingdom', 'UK ', 1),
(5 , 2, 'Germany', 'DE ', 1),
(6 , 2, 'France', 'FR ', 1),
(7 , 2, 'Italy', 'IT ', 1),
(8 , 2, 'Spain', 'ES ', 1),
(9 , 2, 'The Netherlands', 'NL ', 1),
(10, 2, 'Poland', 'PL ', 2),
(11, 2, 'Russia', 'RU ', 2)
create table RowData
(
Tr_ID int,
Countrys varchar(200)
)
insert into RowData values
(729541, 'Germany,United Kingdom'),
(729553, 'Italy,Poland,Russia,Spain'),
(729580, 'Austria,Finland,France,Germany,Ireland,Italy,Poland,Portugal,Romania,Russia,Slovakia,Spain,Sweden,Switzerland,The Netherlands,United Kingdom'),
(729726, 'Italy,Spain,United Kingdom'),
(729737, 'Austria,United Kingdom')
select R.Tr_ID,
(
select ','+C.Country_Name
from Country as C
where ','+R.Countrys+',' like '%,'+C.Country_Name+',%'
order by C.Priority
for xml path(''), type
).value('substring(text()[1], 2)', 'varchar(200)') as Countrys
from RowData as R
| TR_ID | COUNTRYS |
------------------------------------------------------------------------------------
| 729541 | United Kingdom,Germany |
| 729553 | Italy,Spain,Poland,Russia |
| 729580 | United Kingdom,Germany,France,Italy,Spain,The Netherlands,Poland,Russia |
| 729726 | United Kingdom,Italy,Spain |
| 729737 | United Kingdom |
:
create table Country
(
Country_ID int,
Region_ID int,
Country_Name varchar(25),
Abbreviation varchar(5),
Priority int
);
insert into Country values
(1 , 1, 'United States', 'USA', 1),
(2 , 1, 'US', 'USA', 1),
(3 , 1, 'Canada', 'CA ', 2),
(4 , 2, 'United Kingdom', 'UK ', 1),
(5 , 2, 'Germany', 'DE ', 1),
(6 , 2, 'France', 'FR ', 1),
(7 , 2, 'Italy', 'IT ', 1),
(8 , 2, 'Spain', 'ES ', 1),
(9 , 2, 'The Netherlands', 'NL ', 1),
(10, 2, 'Poland', 'PL ', 2),
(11, 2, 'Russia', 'RU ', 2)
create table RowData
(
Tr_ID int,
Countrys varchar(200)
)
insert into RowData values
(729541, 'Germany,United Kingdom'),
(729553, 'Italy,Poland,Russia,Spain'),
(729580, 'Austria,Finland,France,Germany,Ireland,Italy,Poland,Portugal,Romania,Russia,Slovakia,Spain,Sweden,Switzerland,The Netherlands,United Kingdom'),
(729726, 'Italy,Spain,United Kingdom'),
(729737, 'Austria,United Kingdom')
select R.Tr_ID,
(
select ','+C.Country_Name
from Country as C
where ','+R.Countrys+',' like '%,'+C.Country_Name+',%'
order by C.Priority
for xml path(''), type
).value('substring(text()[1], 2)', 'varchar(200)') as Countrys
from RowData as R
| TR_ID | COUNTRYS |
------------------------------------------------------------------------------------
| 729541 | United Kingdom,Germany |
| 729553 | Italy,Spain,Poland,Russia |
| 729580 | United Kingdom,Germany,France,Italy,Spain,The Netherlands,Poland,Russia |
| 729726 | United Kingdom,Italy,Spain |
| 729737 | United Kingdom |
您正在使用哪个数据库?您是否需要所有优先级为1的国家/地区按字母顺序排列?我使用的是sql server 2008。需要所有优先级为1的国家/地区,但不按字母顺序。注意:
RowData
中缺少的国家/地区将被删除。