2017-04-13 139 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

標籤您正在使用的數據庫管理系統。該代碼是特定於產品的。 – jarlh

+0

代碼不是產品特定的。第一組isnull語句是我想要連接的。我已經把它包裝在一個外殼中,以便在最後處理逗號。 – Imran

+0

ISNULL是產品特定的。轉換是產品特定的。 LEN也是,+用於字符串連接。 – jarlh

回答

1

我假設您正在使用基於語法的SQL Server。

我不會這樣做,通過刪除最後逗號。我會通過刪除使用stuff()第一逗號做到這一點:

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;