Группировать столбцы по значению, а затем объединять в одно значение? - PullRequest
0 голосов
/ 10 декабря 2011

Я видел множество форумов, которые не работали для моей ситуации.У меня есть

<b>Col_1,   Col_2,    Col_3,   Col_n</b>
TRUE     FALSE     FALSE    FALSE
FALSE    TRUE      TRUE     FALSE
TRUE     FALSE     FALSE    TRUE

Мне нужно создать оператор выбора, который возвращает новый столбец со следующими результатами:

<b>New_Column</b>
Col_1
Col_2, Col_3
Col_1, Col_n

Другими словами, если столбец True, затем добавьте имя столбца для моего нового столбца.Поэтому мой набор результатов будет выглядеть так:

<b>myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column</b>

Я пытался:

SELECT
  myID,
  myName,
  myDesc,
  ((CASE WHEN col_1 = 'TRUE' THEN 'col_1' END) + ', ' + (CASE WHEN col_2 = 'TRUE' THEN 'col_2' END) + ', ' + (CASE WHEN col_3 = 'TRUE' THEN 'col_3' END) + ', ' + (CASE WHEN col_n = 'TRUE' THEN 'col_n' END) ) as  New_Column
FROM myTable

Но набор результатов был неверным.Как получить набор результатов, который мне нужен, с предоставленным мне дизайном?

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

<b>myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column</b><br>
Data, Data, TRUE, False, false, true, Null<br>
Data, Data, false, Col_2, Col_3, false, Null<br>
Data, Data, Col_1, Null, Null, Col_n, Col_1Col_2Col_3Col_n<br>

Вот чтоЯ ожидаю:

<b>myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column</b><br>
Data, data, Col_1, Col_2, NULL, Col_N, Col_1Col_2Col_N

1 Ответ

0 голосов
/ 10 декабря 2011

Я предполагаю, что вы получаете NULL-результат, потому что каждое из ваших предложений CASE будет возвращать NULL, когда столбец равен FALSE. Вы должны делать что-то вроде:

BEGIN TRAN
CREATE TABLE MyTable (col_1 VARCHAR(5),
                        col_2 VARCHAR(5),
                        col_3 VARCHAR (5),
                        col_n VARCHAR(5)
                        )
INSERT INTO MyTable
SELECT 'TRUE', 'FALSE', 'TRUE', 'TRUE'                       
UNION ALL
SELECT 'FALSE', 'FALSE', 'FALSE', 'FALSE'                        


SELECT  STUFF(( CASE WHEN col_1 = 'TRUE' THEN ',col_1'
                     ELSE ''
                END ) + ( CASE WHEN col_2 = 'TRUE' THEN ',col_2'
                               ELSE ''
                          END ) + ( CASE WHEN col_3 = 'TRUE' THEN ',col_3'
                                         ELSE ''
                                    END )
              + ( CASE WHEN col_n = 'TRUE' THEN ',col_n'
                       ELSE ''
                  END ), 1, 1, '') AS New_Column
FROM    myTable 

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