2016-12-13 5 views
0

Существует запрос, в котором я должен конкатенировать 12 столбцов в case case. Это было бы проще, если бы это было 2 или 3. Для того, чтобы быть понятнее, вот мой запрос:Объединение нескольких столбцов в оператор case

SELECT column1 
    ,column2 
    ,effet_secondaire_desc = CASE WHEN [symp01] = 'y' THEN 'Pedi apeti' 
           WHEN [symp02] = 'y' THEN 'Ke plen' 
           WHEN [symp03] = 'y' THEN 'Zye jon' 
           WHEN [symp04] = 'y' THEN 'Dyare' 
           WHEN [symp05] = 'y' THEN 'Ko grate' 
           WHEN [symp06] = 'y' THEN 'Lafyev ak frison' 
           WHEN [symp07] = 'y' THEN 'Ko fe mal ak jwenti fe mal' 
           WHEN [symp08] = 'y' THEN 'Pikotman' 
           WHEN [symp09] = 'y' THEN 'Fatig' 
           WHEN [symp10] = 'y' THEN 'Tet vire/vetij' 
           WHEN [symp11] = 'y' THEN 'Vant fe mal' 
           WHEN [symp12] = 'y' THEN [symp12_desc] 
           ELSE '~' 
          END 
      ..... 
      ,columnx 
FROM MyTable 

[symp01] ... [symp12] являются 12 колонн, которые я хочу, чтобы сцепить. Таким образом, значение effet_secondaire_desc должно быть чем-то вроде «Pedi apeti, Ko grate, Lafyev ak frison, ...».

Может ли кто-нибудь помочь мне с этим, пожалуйста? Спасибо заранее.

+0

Это выглядит очень плохой дизайн базы данных. Несколько симптомов должны храниться как несколько строк, а не несколько столбцов. Вы должны изменить это, если не поздно. – abl

+0

Это поздно. Я не проектировал базу данных. Моя роль - просто дать ежедневный отчет. – R2D2

ответ

0
select 
    column1 
    , column2 
    , effet_secondaire_desc = isnull(nullif(stuff(
    case when [symp01] = 'y' then ', Pedi apeti'     else '' end 
    +case when [symp02] = 'y' then ', Ke plen'      else '' end 
    +case when [symp03] = 'y' then ', Zye jon'      else '' end 
    +case when [symp04] = 'y' then ', Dyare'      else '' end 
    +case when [symp05] = 'y' then ', Ko grate'     else '' end 
    +case when [symp06] = 'y' then ', Lafyev ak frison'   else '' end 
    +case when [symp07] = 'y' then ', Ko fe mal ak jwenti fe mal' else '' end 
    +case when [symp08] = 'y' then ', Pikotman'     else '' end 
    +case when [symp09] = 'y' then ', Fatig'      else '' end 
    +case when [symp10] = 'y' then ', Tet vire/vetij'    else '' end 
    +case when [symp11] = 'y' then ', Vant fe mal'     else '' end 
    +case when [symp12] = 'y' then ', '+[symp12_desc]    else '' end 
    ,1,2,''),''),'~') 
    , columnx 
from mytable 
+1

Я просто попробовал, и он работает. Большое спасибо, ребята. Я был с этим с четверга. Вы просто спасли мое время. – R2D2

0

Так что-то вроде этого ?:

SELECT 
... 
CASE WHEN [symp01] = 'y' THEN ', Pedi apeti' ELSE '' END 
+ CASE WHEN [symp02] = 'y' THEN ', Ke plen' ELSE '' END 
+ ... 
END 

А потом завернуть, что в какой-то логики, чтобы удалить первую запятую и пробел.