sql server逗号将字符串值分隔成一行

时间:2015-04-22 10:17:13

标签: sql sql-server sap sapb1

我有一个返回多行Itemcodes行的查询。结果是

   Date        group      list of item code
  2015-04-15    118       FYCT-00063,FYCM-00016,FYCM-00064,FYCF-00018

它工作正常,但我需要这样的结果,并在每个代码'FYCT-00063','FYCM-00016','FYCM-00064','FYCF-00018'附近引用

查询是这样的:

  SELECT DISTINCT SS.PostDate,SS.U_Unit,STUFF((
      SELECT ', ',+   CAST(OWOR.ItemCode AS VARCHAR(10)) [text()]
     FROM OWOR
     WHERE OWOR.PostDate=SS.PostDate AND OWOR.U_Unit=SS.U_Unit AND       OWOR.Status=SS.Status
  FOR XML PATH('') , TYPE)
  .value('.','NVARCHAR(MAX)'),1,2,' ') LISTGroup 
  from owor SS
  Where SS.PostDate='15.APRIL.15' AND SS.U_Unit='Unit No 2' and SS.Status!='C'

3 个答案:

答案 0 :(得分:1)

SELECT DISTINCT SS.PostDate,SS.U_Unit,
    STUFF((
           SELECT ', ',+ '''' + CAST(OWOR.ItemCode AS VARCHAR(10) + '''') [text()]
           FROM OWOR
           WHERE OWOR.PostDate=SS.PostDate 
           AND OWOR.U_Unit=SS.U_Unit 
           AND OWOR.Status=SS.Status
    FOR XML PATH('') , TYPE) .value('.','NVARCHAR(MAX)'),1,2,' ') LISTGroup 
FROM owor SS
WHERE SS.PostDate='15.APRIL.15' 
AND SS.U_Unit='Unit No 2' 
AND SS.Status!='C'

答案 1 :(得分:0)

试试这样:

DECLARE @STRING varchar(max) 
SELECT @STRING = 'FYCT-00063,FYCM-00016,FYCM-00064,FYCF-00018'

SELECT '''' + REPLACE(@STRING,',',''',''') + ''''

<强> SQLFIDDLE DEMO

在你的情况下就像

select distinct SS.PostDate,SS.U_Unit,'''' + REPLACE(STUFF((
  SELECT ', ',+   CAST(OWOR.ItemCode AS VARCHAR(10)) [text()]
  FROM OWOR
  where OWOR.PostDate=SS.PostDate AND OWOR.U_Unit=SS.U_Unit AND OWOR.Status=SS.Status
  FOR XML PATH('') , TYPE)
  .value('.','NVARCHAR(MAX)'),1,2,' '),',',''',''') + '''' LISTGroup 
  from owor SS
  Where SS.PostDate='15.APRIL.15' AND SS.U_Unit='Unit No 2' and SS.Status!='C'

答案 2 :(得分:0)

试试这个

SELECT DISTINCT SS.PostDate
    ,SS.U_Unit
    ,STUFF((
            SELECT ', '
                + QUOTENAME(CAST(OWOR.ItemCode AS VARCHAR(10), ''''))
            FROM OWOR
            WHERE OWOR.PostDate = SS.PostDate
                AND OWOR.U_Unit = SS.U_Unit
                AND OWOR.STATUS = SS.STATUS
            FOR XML PATH('')
            ).value('.', 'NVARCHAR(MAX)'), 1, 2, ' ') LISTGroup
FROM owor SS
WHERE SS.PostDate = '15.APRIL.15'
    AND SS.U_Unit = 'Unit No 2'
    AND SS.STATUS != 'C'