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

существует талбица t1

kod_p | kn | zn | god


647836632 2231 1234 2011
647836632 2232 8734 2011
647836632 2233 8843 2012
475860034 2131 2394 2011
475860034 2132 3774 2012
475860034 2133 2333 2012
475864533 2455 2445 2012

Нужно сделать выборку : kod_p | kn_2011 | zn_2011 | kn_2012 | zn_2012

т.е. сравнить по году
отдельно выборку сделать могу по году вида kod_p | kn_2011 | zn_2011 и kod_p | kn_2012 | zn_2012
а вот все вместе не получается, прошу вашей помощи, заранее спасибо
28 май 13, 16:29    [14360502]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
qwerty112
Guest
112379754534,

select 
kod_p, 
max(case when god=2011 then kn end) as kn_2011,
max(case when god=2011 then zn end) as zn_2011,
max(case when god=2012 then kn end) as kn_2012,
max(case when god=2012 then zn end) as zn_2012
from ...
group by kod_p
28 май 13, 16:36    [14360554]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Вам сказать как сделать или за вас написать код?
28 май 13, 16:36    [14360556]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
112379754534
Guest
сделал через CASE, большое спасибо!
29 май 13, 13:29    [14364419]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
112379754534
Guest
переделал
сделал через join и union

получилось след образом
объединял с табл номер два, где брал "имя"


select ...
from
(
(a) join (b)

union

(a) join (b)
)
group by ...

что то в этом роде:)
через CASE не совсем то. что нужно)
29 май 13, 13:49    [14364587]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
Glory
Member

Откуда:
Сообщений: 104751
112379754534
через CASE не совсем то. что нужно)

Просто вы не умеете подставлять CASE в агрегатные функции
29 май 13, 13:55    [14364609]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
112379754534
Guest
Glory
112379754534
через CASE не совсем то. что нужно)

Просто вы не умеете подставлять CASE в агрегатные функции


возможно

еще дело в том, что kod_p у меня в таблицы в том числе и за другие года (виноват за изначально некорректно поставленный вопрос)
а в выборке мне нужно только свод за 2011 и 2012 год
29 май 13, 14:00    [14364624]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
Glory
Member

Откуда:
Сообщений: 104751
112379754534
еще дело в том, что kod_p у меня в таблицы в том числе и за другие года (виноват за изначально некорректно поставленный вопрос)
а в выборке мне нужно только свод за 2011 и 2012 год

Записи фильтруются с помощью where
29 май 13, 14:15    [14364701]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
112379754534
Guest
select
kod_p,
max(case when god=2011 then kn end) as kn_2011,
max(case when god=2011 then zn end) as zn_2011,
max(case when god=2012 then kn end) as kn_2012,
max(case when god=2012 then zn end) as zn_2012
from ...
group by kod_p


почему в данном примере присутствует MAX перед выражением CASE
ведь как я понимаю будет браться максимальное значение kn и zn на kod_p
после чего груп по kod_p, значения kod_p повторяются неоднократно и соответственно будут теряться цифры
29 май 13, 14:30    [14364812]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
Glory
Member

Откуда:
Сообщений: 104751
112379754534
почему в данном примере присутствует MAX перед выражением CASE

Потому что это пример.
Вы же не показали, какие цифры должны получиться

112379754534
ведь как я понимаю будет браться максимальное значение kn и zn на kod_p
после чего груп по kod_p, значения kod_p повторяются неоднократно и соответственно будут теряться цифры

Что мешает использовать такую агрегатную функцию, которая не будет "терять цифры" ?
29 май 13, 14:33    [14364833]     Ответить | Цитировать Сообщить модератору
 Re: Объединение выборок  [new]
112379754534
Guest
получилось:) через CASE)

select 
kod_p,kn,
SUM(case when god = 2011 then zn end) as zn_11,
kn,
SUM(case when god = 2012 then zn end) as zn_12
from data_s
where god in (2011,2012)
group by kod_p, kn
29 май 13, 14:44    [14364920]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить