2017-10-01 6 views
1

SQL Serverが構文エラーをスローするため、このクエリを修正したいと考えています。SQL Server 2008の構文エラーを回避するためにこのクエリを修正する方法

クエリの目的は、列Articulo.ReferenciaFichasを連結して、selectステートメントに含める1つの文字列にします。

テーブル

Articulos:

 Codigo Nombre   
     --------------- 
     Z540021 Motul oil 1050w2 
     Z540022 Motul oil 1030w 

ReferenciaFichas:

 Codigo  Articulo 
     --------------------   
     MF99.00102 Z540021 
     MP08-0186 Z540021 
     OUT1006  Z540021 
     MTUL14  Z540022 

が列を連結するには、私は

DECLARE @provrefs VARCHAR(200) 

SELECT 
    @provrefs = COALESCE(@provrefs + ',', '') + [provlist].[Codigo] 
FROM 
    (SELECT 
     [Codigo] 
    FROM 
     [GES16100].[dbo].[ReferenciasFichas] 
    WHERE 
     Articulo = 'Z540021') provlist 

SELECT @provrefs 
に動作します。このスタンドアロンのクエリを書きました

MF99.00102,MP08-0186,OUT1006 

しかし、私が選択するには、このクエリを移動すると、クエリがないため、構文エラーを動作します:

結果があります。 ファイルの先頭にdeclareステートメントを移動しようとしましたが、余分な括弧が 追加されました。しかし、私は解決策を見つけることができませんでした。

どうすれば修正できますか?

このクエリが動作していません。

SELECT 
    [arts].[Codigo] AS [Referencia], 
    ((DECLARE @provrefs VARCHAR(200)    
     SELECT @provrefs = COALESCE(@provrefs + ',', '') + [provlist].[Codigo] 
     FROM 
      (SELECT [reff].[Codigo] 
      FROM [GES16100].[dbo].[ReferenciasFichas] reff 
      WHERE [reff].[Articulo] = [arts].[Codigo]) provlist) 
SELECT @provrefs) AS [Proveedores] 
FROM [GES16100].[dbo].[Articulos] AS arts 

期待される結果stuff() with select ... for xml path ('') method of string concatenationを使用して

Referencia Proveedores 
-------------------------- 
Z540021  MF99.00102,MP08-0186,OUT1006 
Z540022  MTUL14  

答えて

1

select 
    Referencia = arts.Codigo 
    , Proveedores = stuff(
     (
     select ','+reff.Codigo 
     from GES16100.dbo.ReferenciasFichas as reff 
     where reff.Articulo = arts.Codigo 
     for xml path (''), type).value('(./text())[1]','nvarchar(max)') 
    ,1,1,'') 
from GES16100.dbo.Articulos as arts 

rextesterデモ:http://rextester.com/MVSW22706

リターン:

+------------+------------------------------+ 
| Referencia |   Proveedores   | 
+------------+------------------------------+ 
| Z540021 | MF99.00102,MP08-0186,OUT1006 | 
| Z540022 | MTUL14      | 
+------------+------------------------------+ 
+0

感謝。私はXMLパスを試してみましたが、最初のカンマを削除する方法はわかりません。スタッフの参考にもありがとう。 – ppk

+0

@ppk喜んで助けてください! – SqlZim

関連する問題