2017-01-02 8 views
-1

таблицы я работаю содержит данные в следующем форматеНужна помощь в создании представления в SQL со следующими данными

Name | A | B | C 
---------------- 
abc | 1 | 0 | 1 
xyz | 0 | 1 | 1 
pqr | 0 | 0 | 1 

Мне нужно, чтобы создать вид на как этот

Name | Type 
abc | A 
abc | C 
xyz | B 
xyz | C 
pqr | C 

Будет ли использование и когда вам будет полезно?

case when A=1 then 'A' 
    when B=1 then 'B' 
    when C=1 then 'C' 
    else '' 
    end as type 

Заранее благодарен!

+0

По SO вы должны ответить что-то на вопрос, у вас есть asked..if это поможет вам любому из ответа ..Ны на upvote ..happy кодирования – mohan111

+0

Спасибо! это сработало для меня! Я не могу повышать свою репутацию, поскольку у меня недостаточно репутации. –

ответ

1

Образец таблицы:

DECLARE @Table1 TABLE 
    (Name varchar(3), A int, B int, C int) 
; 

INSERT INTO @Table1 
    (Name, A, B, C) 
VALUES 
    ('abc', 1, 0, 1), 
    ('xyz', 0, 1, 1), 
    ('pqr', 0, 0, 1) 
; 

Script

Select Name,[Type] from (
select Name,CASE WHEN VAL = 1 then COL ELSE NULL END Type,VAL from @Table1 
CROSS APPLY(VALUES('A',A),('B',B),('C',C))CS(COL,VAL) 
)T WHERE T.Type IS NOT NULL 
0

Вы можете использовать union all

select name,'A' from t where a = 1 union all 
select name,'B' from t where b = 1 union all 
select name,'C' from t where c = 1; 

Вы также можете группировать где условие как:

select name, col 
from 
    (select name, 'A' col, a val from t union all 
    select name, 'B', b from t union all 
    select name, 'C', c from t) 
where val = 1; 
0

Мы можем использовать объединение всех, чтобы выбрать все записи из таблицы и вставить в представление. Для запроса ниже будет достаточно вашего требования. Спасибо.

create or replace view test1 as (
select name,field from (
select name,'A' as field from test where a = 1 union all 
select name,'B' as field from test where b = 1 union all 
select name,'C' as field from test where c = 1));