Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在sql中重新排列逗号分隔的值_Sql Server_Sql Server 2008 - Fatal编程技术网

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
中缺少的国家/地区将被删除。