2017-04-13 79 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;