2017-02-17 5 views
0

Я готовлю сценарий миграции, в результате чего значения из одной системы с несколькими логическими значениями будут сопоставлены с несколькими списками в новой системе, и меня попросили извлекать данные из старой системы в формате. Каждому значению присваивается сопоставление в новой системе. поэтому для флага экземпляра-верно в старой системе значения требования потребуется «0001» добавляется к значению строки, то это должно перебирать каждый из требуемых полей флага поэтому выход для каждого клиента выглядит следующим образоммиграция данных, добавляющих логические поля флага для выпадающего списка multilist

  • '0001', '0002', '0003'
  • '0002'
  • '0001', '0003'

Моя учетная таблица имеет следующие значения flag1, flag2, flag3, flag4 и флаг 5 поэтому для получения исходной информации я просто использую

select id, flag1, flag2, flag3, flag4 from account 

Как я могу перебирать соответствующие поля, чтобы я мог вернуть строку в вышеупомянутом стиле? Будет ли это лучше всего сделать через ряд операторов IF в запросе?

Например некоторые примерные данные:

id flag1 flag2 flag3 flag4 
1 true false false true 
2 true true true true 
3 false true false false 
4 true false false false 
5 false false false false 

Я хотел бы получить выход следующим образом:

id string 
1 '0001','0004' 
2 '0001','0002','0003','0004' 
3 '0002' 
4 '0001' 
5 
+0

Просьба предоставить некоторые данные и желаемый результат, чтобы помочь нам лучше понять, что вы хотите. – Kostis

+0

Я добавил некоторые примеры данных и результатов, которые я надеялся найти – Jay

ответ

1
SELECT 
    id 
    ,(case when flag1 = 'true' then ',''0001''' else '' end) 
    + (case when flag2 = 'true' then ',''0002''' else '' end) 
    + (case when flag3 = 'true' then ',''0003''' else '' end) 
    + (case when flag4 = 'true' then ',''0004''' else '' end) 
FROM account 

UPDATE: Поскольку первый флаг может быть ложным, и вы не» t хотите лидировать «,» вы можете устранить его, используя STUFF()

SELECT 
    id 
    ,STUFF(((case when flag1 = 'true' then ',''0001''' else '' end) 
    + (case when flag2 = 'true' then ',''0002''' else '' end) 
    + (case when flag3 = 'true' then ',''0003''' else '' end) 
    + (case when flag4 = 'true' then ',''0004''' else '' end) 
    ),1,1,'') 
FROM account 
+0

Я пробовал использовать это с остальной частью моего запроса, но я получаю синтаксическую ошибку, которая должна содержать 4 аргумента – Jay

+0

SELECT a.AccountId как 'ref_id', STUFF ((случай, когда b.New_VisuallyImpaired = 'true' then ',' '0001' '' else '' end) + (случай, когда b.New_SpeechImpaired = 'true' then ',' '0002' '' else '' конец) + (случай, когда b.New_HearingImpaired = 'true' then ',' '0003' '' else '' end) + (случай, когда b.New_Elderly = 'true' then ',' '0004' '' else '' end)), 1,1, '')) FROM AccountBase как внутреннее соединение AccountExtensionBase как b ON a.AccountId = b.AccountId внутреннее соединение CustomerAddressBase как c ON a.AccountId = c.ParentId где new_accountstage = 7 и new_accounttype = 2 и addresstypecode равна нулю – Jay

+1

я пропустил скобку в начале STUFF :) – Kostis

Смежные вопросы