2017-01-24 2 views
0

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

CREATE TABLE [dbo].[TestTable] (
    [Id]      INT  NOT NULL, 
    [FoodCard]     BIT    NULL, 
    [FuelCard]     BIT    NULL, 
    [GoCard]     BIT    NULL, 
    [Created]     DATETIME  NOT NULL, 
    [CreatedBY]     VARCHAR (150) NOT NULL, 
    [Modified]     DATETIME  NULL, 
    [ModifiedBy]    VARCHAR (150) NULL, 
    [PaymentTotal]    DECIMAL (10, 2) NULL 
); 

Использование хранимой процедуры Мне нужно создать запятую списка битовых значений, которые являются истинными (так что если FuelCard был 1 мой результат будет Fuel Card, но если FuelCard и FoodCard было один мой результат будет Fuel Card, Food Card. в моей реальной таблице у меня есть около 12 битных значений для работы с.

Я думал о выполнении с с длинной серией операторов case для создания моего списка с разделителями-запятыми, но это выглядит очень плохой практикой. Каким будет лучший способ t это проблема?

+0

Вам нужны значения столбцов с разделителями-запятыми или имена колонок, которые будут разделены запятой? –

ответ

2

Вы можете сделать это с case, как это:

select stuff((case when FoodCard = 1 then ', FoodCard' else '' end) + 
       (case when FuelCard = 1 then ', FuelCard' else '' end) + 
       (case when GoCard = 1 then ', GoCard' else '' end) + 
       . . ., 
       1, 2, '') as cardList 

stuff() удаляет первые два символа, которые, как ', '.

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