Удалить запятую из STUFF, если у меня есть только одно значение - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы убрать запятую в конце, если внутри вещи есть только одно значение, но оно должно существовать, есть более одного значения спасибо!

select
Names= (STUFF((
  SELECT ', ' +     CONCAT(
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.FirstName ELSE App.FirstName END,
                ' ',
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.LastName ELSE App.LastName END
            ) AS Names
    FROM ConsultingEventConsultant
            LEFT JOIN App
                ON ConsultingEventConsultant.AppID = App.AppID
            LEFT JOIN RegistryUser
                ON App.UserID = RegistryUser.UserID
            WHERE ConsultingEventConsultant.consultingeventid = 56428 
            and ConsultingEventConsultant.CECID != (SELECT TOP 1 CECID FROM ConsultingEventConsultant CEC WHERE CEC.ConsultingEventID = 56428 ORDER BY CECID)
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
             ), 1, 1, ''))

Джон Доу

Джон Доу, Сара Смит

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Как утверждает Джон Каппеллети, вы удаляете начальную запятую (но не начальную пробел), а если есть запятая, то у вас возвращается пустая строка.

Чтобы удалить пробел толькоизмените второе значение 1 рядом с концом на 2, как показано ниже.

select
Names= (STUFF((
  SELECT ', ' +     CONCAT(
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.FirstName ELSE App.FirstName END,
                ' ',
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.LastName ELSE App.LastName END
            ) AS Names
    FROM ConsultingEventConsultant
            LEFT JOIN App
                ON ConsultingEventConsultant.AppID = App.AppID
            LEFT JOIN RegistryUser
                ON App.UserID = RegistryUser.UserID
            WHERE ConsultingEventConsultant.consultingeventid = 56428 
            and ConsultingEventConsultant.CECID != (SELECT TOP 1 CECID FROM ConsultingEventConsultant CEC WHERE CEC.ConsultingEventID = 56428 ORDER BY CECID)
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
             ), 1, 2, ''))

Чтобы узнать больше о пустой строке, выполните следующее.Тогда вы сможете найти ошибочные данные и исправить их или ошибочную логику в запросе (в зависимости от того, что вызывает пустую строку).

SELECT ', ' +     CONCAT(
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.FirstName ELSE App.FirstName END,
                ' ',
                CASE WHEN RegistryUser.FirstName IS NOT NULL AND RegistryUser.LastName IS NOT NULL THEN RegistryUser.LastName ELSE App.LastName END
            ) AS Names,
            *
    FROM ConsultingEventConsultant
            LEFT JOIN App
                ON ConsultingEventConsultant.AppID = App.AppID
            LEFT JOIN RegistryUser
                ON App.UserID = RegistryUser.UserID
            WHERE ConsultingEventConsultant.consultingeventid = 56428 
            and ConsultingEventConsultant.CECID != (SELECT TOP 1 CECID FROM ConsultingEventConsultant CEC WHERE CEC.ConsultingEventID = 56428 ORDER BY CECID)
0 голосов
/ 21 мая 2019

Я бы рекомендовал отметить, когда имя не найдено.Возможно, это то, что вам нужно:

select STUFF((SELECT ', ' + 
                     COALESCE(ru.FirstName + ' ' + ru.LastName, 
                              a.FirstName + ' ' + a.LastName,
                              '<NO NAME FOUND>'
                             ) AS Names
              FROM ConsultingEventConsultant c3c LEFT JOIN
                   App a
                   ON cec.AppID = a.AppID LEFT JOIN
                   RegistryUser ru
                   ON a.UserID = ru.UserID
              WHERE cec.consultingeventid = 56428 AND
                    cec.CECID <> (SELECT TOP 1 cec2CECID
                                  FROM ConsultingEventConsultant CEC2 
                                  WHERE CEC2.ConsultingEventID = 56428                                 ORDER BY CECID
                                 )
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
             ), 1, 2, ''
            ) as names

В качестве альтернативы, вы можете добавить логику, подобную этой:

 (ru.FirstName IS NOT NULL OR a.FirstName IS NOT NULL) AND

к предложению WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...