2017-04-13 13 views
0

私がコンマを追加して分離している列を連結しようとしています。私は、最後のカンマを削除したいと、私はこれを行うに考えることができる唯一の方法は、以下の複雑な方法を使用している:SQL連結された列から最後のカンマを削除します

SELECT   
id, 

CASE WHEN LEN(
      ISNULL(CASE WHEN intExtraTime > 0 THEN Convert(varchar(3),intExtraTime) + '% Extra Time, ' END,'') + 
      ISNULL(CASE WHEN intprocessor = 1 THEN 'Laptop, ' END,'') + 
      ISNULL(CASE WHEN intRest = 1 THEN 'Rest Break, ' END,'') + 
      ISNULL(CASE WHEN intReader = 1 THEN 'Reader, ' END,'') + 
      ISNULL(CASE WHEN intScribe = 1 THEN 'Scribe, ' END,''))>0 
THEN 
    SUBSTRING(
       ISNULL(CASE WHEN intExtraTime > 0 THEN Convert(varchar(3),intExtraTime) + '% Extra Time, ' END,'') + 
       ISNULL(CASE WHEN intprocessor = 1 THEN 'Laptop, ' END,'') + 
       ISNULL(CASE WHEN intRest = 1 THEN 'Rest Break, ' END,'') + 
       ISNULL(CASE WHEN intReader = 1 THEN 'Reader, ' END,'') + 
       ISNULL(CASE WHEN intScribe = 1 THEN 'Scribe, ' END,''),1, 
      LEN(
       ISNULL(CASE WHEN intExtraTime > 0 THEN Convert(varchar(3),intExtraTime) + '% Extra Time, ' END,'') + 
       ISNULL(CASE WHEN intprocessor = 1 THEN 'Laptop, ' END,'') + 
       ISNULL(CASE WHEN intRest = 1 THEN 'Rest Break, ' END,'') + 
       ISNULL(CASE WHEN intReader = 1 THEN 'Reader, ' END,'') + 
       ISNULL(CASE WHEN intScribe = 1 THEN 'Scribe, ' END,''))-1) 
END 

FROM   dbo.Candidate AS ExamOptions 

誰もがこれを行うには良い、よりクリーンな方法を知っていますか?

+2

タグ、使用しているDBMS:私はstuff()を使用して最初カンマを削除することによってこれを行うだろう。そのコードは製品固有です。 – jarlh

+0

コードは製品固有ではありません。 isnullステートメントの最初のセットは、私が連結したいものです。私は最後にカンマを扱うためにこれを外側のケースに包み込んだ。 – Imran

+0

ISNULLは製品固有のものです。変換は製品固有です。 LENもまた文字列連結の場合は+です。 – jarlh

答えて

1

私はあなたの構文に基づいてSQL Serverを使用していると仮定します。

最後にのカンマを削除することでこれを行うことはありません。

SELECT (CASE WHEN intExtraTime > 0 or intprocessor = 1 or intRest = 1 or 
       intReader = 1 or intScribe = 1 
      THEN STUFF(COALESCE(CASE WHEN intExtraTime > 0 THEN ', ' + Convert(varchar(3), intExtraTime) + '% Extra Time' END, '') 
         COALESCE(CASE WHEN intprocessor = 1 THEN ', Laptop' END, '') + 
         COALESCE(CASE WHEN intRest = 1 THEN ', Rest Break' END, '') + 
         COALESCE(CASE WHEN intReader = 1 THEN ', Reader' END, '') + 
         COALESCE(CASE WHEN intScribe = 1 THEN ', Scribe' END, ''), 
         1, 2, '') 
     END) 
FROM dbo.Candidate ExamOptions; 
関連する問題