Проблема в T-sql - PullRequest
       13

Проблема в T-sql

0 голосов
/ 07 июля 2011

У меня есть таблица результатов, и данные выглядят следующим образом:

Response_ID  order    [part label]             [Answer text]     [Answer label]
124587       6        It was not clear         NULL               Yes
124587       6        Did not Understand      Null                Yes
124589       6        Other (Please specify):  Not enough         Yes 
124563       1        NULL                     Satisfied?         Yes
124583       11       Not frequent             NULL               Yes  
125687       2        NULL                     Resolved?          NO

Я хочу Вывести как:

Response_ID           [Part label]
124587                It was not clear,Did not Understand 
124589                Not enough         
124563                Yes
124583                Not frequent
125687                NO

Логика заключается в том, что когда Order равен 6 или 11, тогда мне нужнодля отображения [Метка детали], если [Метка детали] имеет несколько значений для одного Response_ID, тогда мне нужно объединить их, но когда значение [Метка детали] Другое (Пожалуйста, укажите): тогда мне нужно использовать значение из текста ответастолбец и если порядок не в 6,11, то мне нужно отобразить значение из метки ответа

Ответы [ 4 ]

3 голосов
/ 07 июля 2011

Я не видел часть о заказе.Я надеюсь, что это работает сейчас.

DECLARE @t TABLE (Response_ID INT,[order] INT, [part label] VARCHAR(25), [Answer text] VARCHAR(15), [Answer label] VARCHAR(3))

INSERT @t VALUES (124587,6 , 'It was not clear'       , NULL        , 'Yes')
INSERT @t VALUES (124587,6 , 'Did not Understand'    , Null        , 'Yes' )
INSERT @t VALUES (124589,6 , 'Other (Please specify):','Not enough' , 'Yes')
INSERT @t VALUES (124563,1 , NULL                     ,'Satisfied?' , 'Yes')
INSERT @t VALUES (124583,11, 'Not frequent'           , NULL        , 'Yes') 
INSERT @t VALUES (125687,2 , NULL                     ,'Resolved?'  , 'NO' )

SET ARITHABORT ON

;WITH x AS   ( 
SELECT CASE WHEN [order] = 11 THEN 6 ELSE [order] END [order], response_id, COALESCE(CASE WHEN [part label] = 'Other (Please specify):' THEN [Answer text] ELSE [part label] end ,[Answer label]) [Part label] 
FROM @t
) 
SELECT response_id, STUFF(( 
        SELECT ',' + [Part label] 
        FROM x t1 
        WHERE t1.response_id = x.response_id and t1.[order] = x.[order]
        for xml path(''), type 
    ).value('.', 'varchar(max)'), 1, 1, '') [Part label] FROM x
GROUP BY response_id, [order]

Результат:

response_id Part label
----------- -------------------------------------
124563      Yes
124583      Not frequent
124587      It was not clear,Did not Undersstand
124589      Not enough
125687      NO
1 голос
/ 07 июля 2011

Раньше это было достигнуто через малоизвестный угол, включающий ISNULL (). В наши дни люди делают это с помощью «FOR XML PATH». Обратите внимание, что это не поддерживается, но оно будет работать для вас прямо сейчас.

Объединение значений строк в T-SQL

0 голосов
/ 07 июля 2011

Ознакомьтесь с разделом «Методы XML черного ящика» в следующей статье. Я верю, что это удовлетворит ваши потребности.

* ** 1003 тысячи два *https://www.simple -talk.com / SQL / T-SQL-программирование / конкатенация-строка-значения-в-Transact-SQL /
0 голосов
/ 07 июля 2011

Плохо, простого решения не существует, поскольку Sql Server не может объединить строки набора результатов. Посмотрите на эти вопросы:

Объединить много строк в одну текстовую строку?

Как создать функцию SQL Server для "объединения" нескольких строк из подзапроса в одно поле с разделителями?

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