Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка анкет  [new]
Анкетчик
Guest
Приветище!
Есть ответы на вопроса в виде таблицы из полей
анкета подразделение вопрос1 вопрос2 вопрос3 ... вопросN

у всех вопросов 4 ответа

как получить таблицу

подразделение ответ1 ответ2 ответ3 ответ4

где в ответах количества ответов, данные в подраздении.


P.S. Вот и как упражнение по SQL - кратко и четко.
21 дек 09, 15:11    [8096149]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
iljy
Member

Откуда:
Сообщений: 8711
Анкетчик,

declare @t table (Code int, Q1 int, Q2 int,Q3 int)

insert into @t
select 1, 1,2,3 union all
select 1, 2,4,3 union all
select 2, 1,2,3 union all
select 2, 4,1,1 union all
select 3, 4,1,2



select Code, SUM(case Q when 1 then 1 else 0 end) A1,
	SUM(case Q when 2 then 1 else 0 end) A2,
	SUM(case Q when 3 then 1 else 0 end) A3,
	SUM(case Q when 4 then 1 else 0 end) A4
from @t unpivot
(
	Q for QT in ([q1],[q2],[q3])
) unpvt
group by Code
21 дек 09, 16:00    [8096585]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
Анкетчик
Guest
Извините за некорректность

получить надо
подразделение вопрос ответ1 ответ2 ответ3 ответ4

P.S. А вообще создал таблицу и для каждого вопроса свой insert - и так же sum(case .

Но есть вопросов многовато?

Это вид crosstab?
21 дек 09, 16:29    [8096869]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
iljy
Member

Откуда:
Сообщений: 8711
Анкетчик,

select Code, QT, SUM(case Q when 1 then 1 else 0 end) A1,
	SUM(case Q when 2 then 1 else 0 end) A2,
	SUM(case Q when 3 then 1 else 0 end) A3,
	SUM(case Q when 4 then 1 else 0 end) A4
from @t unpivot
(
	Q for QT in ([q1],[q2],[q3])
) unpvt
group by Code,QT
21 дек 09, 17:33    [8097410]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
Анкетчик
Guest
pivot и unpivot - это замечательно конечно

А в SQL Server 2000 как-нибудь исхитриться возможно?
22 дек 09, 12:04    [8100499]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Анкетчик
pivot и unpivot - это замечательно конечно

А в SQL Server 2000 как-нибудь исхитриться возможно?
declare @t table (Code int, Q1 int, Q2 int,Q3 int)

insert into @t
select 1, 1,2,3 union all
select 1, 2,4,3 union all
select 2, 1,2,3 union all
select 2, 4,1,1 union all
select 3, 4,1,2;

SELECT T.Code, Q.Q QT,
 SUM(case case Q when 'Q1' then T.Q1 when 'Q2' then T.Q2 when 'Q3' then T.Q3 end when 1 then 1 else 0 end) A1,
 SUM(case case Q when 'Q1' then T.Q1 when 'Q2' then T.Q2 when 'Q3' then T.Q3 end when 2 then 1 else 0 end) A2,
 SUM(case case Q when 'Q1' then T.Q1 when 'Q2' then T.Q2 when 'Q3' then T.Q3 end when 3 then 1 else 0 end) A3,
 SUM(case case Q when 'Q1' then T.Q1 when 'Q2' then T.Q2 when 'Q3' then T.Q3 end when 4 then 1 else 0 end) A4
FROM @t T CROSS JOIN (SELECT 'Q1' UNION ALL SELECT 'Q2' UNION ALL SELECT 'Q3') Q(Q)
GROUP BY T.Code,Q.Q;
22 дек 09, 12:45    [8100983]     Ответить | Цитировать Сообщить модератору
 Re: Обработка анкет  [new]
Анкетчик
Guest
Thanks
22 дек 09, 14:23    [8101928]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить