2013-06-12 4 views
0

Я использую MS SQL 2005.Как пропустить результат запроса?

Это запрос:

SELECT allow_r, allow_h, allow_c, sponsorid 
FROM Sponsor 
WHERE sponsorid = 2 

Это результат:

allow_r allow_h  allow_c sponsorid 
---------- ---------- ---------- ----------- 
1   1   0   2 

Мне нужно, чтобы это было:

allow_r 1 2 
allow_h 1 2 

allow_c не должно быть в результате как 0

ответ

1

Кажется, что вы действительно хотите, чтобы UNPIVOT данные, которые превращают столбцы в строки. Вы можете использовать следующее:

select col, value, sponsorid 
from sponsor 
unpivot 
(
    value 
    for col in (allow_r, allow_h, allow_c) 
) unpiv 
where sponsorid = 2 
    and value <> 0 

См. SQL Fiddle with Demo.

Функция UNPIVOT делает то же самое, как с помощью UNION ALL запрос:

select 'allow_r' as col, allow_r as value, sponsorid 
from sponsor 
where sponsorid = 2 
    and allow_r <> 0 
union all 
select 'allow_h' as col, allow_h as value, sponsorid 
from sponsor 
where sponsorid = 2 
    and allow_h <> 0 
union all 
select 'allow_c' as col, allow_c as value, sponsorid 
from sponsor 
where sponsorid = 2 
    and allow_c <> 0; 

См SQL Fiddle with Demo

Оба запроса дают результат:

|  COL | VALUE | SPONSORID | 
------------------------------- 
| allow_r |  1 |   2 | 
| allow_h |  1 |   2 | 
+0

совершенны, спасибо – user1706426

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