2013-01-09 61 views
0

您好我有兩個表的表一個有縣信息 等一個有RowData重新排列逗號分隔值

國表裏看起來像

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 

我想根據縣表中給出的優先順序重新排列縣的地區

優先級1個應縣首先發生擴孔國家未來與逗號重複 請幫我在這

感謝

+1

您正在使用的數據庫?您是否需要所有優先級1的國家按字母順序排列? –

+0

我使用的是sql server 2008.所有優先級爲1的縣都需要,但不是按字母順序排列。 – user1632718

回答

2

SQL Fiddle

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') 

查詢1

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 

Results

| 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 | 
+0

注意:在'Country'中丟失的'RowData'中的國家/地區將被刪除。 –