テスト環境
の作成は、まずiは
CREATE TABLE InvoiceLocations (ID int,CODE varchar(3), VALUE varchar(3));
CREATE TABLE PCInvoiceLOcation (ID int,CategoryID INT, Locations varchar(50),DefaultLocationID int);
INSERT INTO InvoiceLocations(ID,CODE,VALUE)
VALUES(1,'BFC','BFC'),
(2,'BRH','BRH'),
(3,'BRP','BRP'),
(4,'BCC','BCC')
INSERT INTO PCInvoiceLOcation(ID,CategoryID,Locations,DefaultLocationID)
VALUES(1,1,'1,2',1),
(2,2,'2,3',2),
(3,3,'2,1',1),
(4,4,'4',4)
ソリューション
あなたが達成できるテスト環境を作成するには、次のコマンドを使用しましたこの 3つのステップで:
- まず、行
- に
Locations
フィールドを分割関連の値
- はカンマでまず
を提出区切りに結果を集計得るためにInvoiceLocations
表で、これらの行に参加Locations
フィールドを行に分割します。
;with tmp(ID,CategoryID,Locations,DefaultLocationID, DataItem , Data) as (
select ID,CategoryID,Locations,DefaultLocationID,
CAST(LEFT(Locations, CHARINDEX(',',Locations+',')-1) as varchar(5)),
STUFF(Locations, 1, CHARINDEX(',',Locations+','), '')
from PCInvoiceLOcation
union all
select ID,CategoryID,Locations,DefaultLocationID,
CAST(LEFT(Data, CHARINDEX(',',Data+',')-1) AS Varchar(5)),
STUFF(Data, 1, CHARINDEX(',',Data+','), '')
from tmp
where Data > '')
コンマにクエリ全体が
のように見えます
Select ID,CategoryID,Locations,DefaultLocationID,
STUFF((SELECT ', ' + VALUE
FROM Tmp2 AS T3
WHERE T3.ID = tmp2.ID
FOR XML PATH('')), 1, 2, '')
FROM tmp2
GROUP BY ID,CategoryID,Locations,DefaultLocationID
をします提出区切りに関連する値
select tmp.ID,CategoryID,Locations,DefaultLocationID, DataItem , InvoiceLocations.VALUE
from tmp
INNER JOIN InvoiceLocations ON tmp.DataItem = InvoiceLocations.ID
は結果を集計得るためにInvoiceLocationsテーブルでこれらの行に参加
;with tmp(ID,CategoryID,Locations,DefaultLocationID, DataItem , Data) as ( select ID,CategoryID,Locations,DefaultLocationID, CAST(LEFT(Locations, CHARINDEX(',',Locations+',')-1) as varchar(5)), STUFF(Locations, 1, CHARINDEX(',',Locations+','), '') from PCInvoiceLOcation union all select ID,CategoryID,Locations,DefaultLocationID, CAST(LEFT(Data, CHARINDEX(',',Data+',')-1) AS Varchar(5)), STUFF(Data, 1, CHARINDEX(',',Data+','), '') from tmp where Data > '') ,tmp2(ID,CategoryID,Locations,DefaultLocationID, DataItem , VALUE) AS ( select tmp.ID,CategoryID,Locations,DefaultLocationID, DataItem , InvoiceLocations.VALUE from tmp INNER JOIN InvoiceLocations ON tmp.DataItem = InvoiceLocations.ID) Select ID,CategoryID,Locations,DefaultLocationID, STUFF((SELECT ', ' + VALUE FROM Tmp2 AS T3 WHERE T3.ID = tmp2.ID FOR XML PATH('')), 1, 2, '') FROM tmp2 GROUP BY ID,CategoryID,Locations,DefaultLocationID
結果:

SQLFiddle Demo
参照
あなた自身で試しましたか? – SchmitzIT
はい次のクエリを実行しようとしていますが、私のために働いていません –
declare @@ LocationId nvarchar(50)= '1,2' @@ sql nvarchar(最大) を宣言する@@出力テーブル(コードnvarchar(10) null) @@ sql = 'を設定します。invoiceLocations WHERE Id IN(' + @ LocationId + ')'insert @@ Output(Code)exec sp_executesql @sql –