Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Airgolem Member Откуда: Сообщений: 15 |
Доброго дня, решил заняться, sql. MSSQLserver2008 Комрады помогите плиз решить задачку. Надо что бы в результирующей таблицы суммы заняли свое место в соответствии от куда пришло поступление. При этом там где k_id одинаковый, надо что бы сумма занимала соответственно одну строку. И посчитать общий результат. Имеющаяся таблица. t_id K_id Summa Post 1 12 20,00 bank 2 12 300,00 sber 3 5 500,00 bank 4 6 100,00 par 5 10 500,00 bank 6 20 600,00 par 7 8 40,00 sber 9 8 80,00 sber Должно получиться следующее. t_id k_id summa zach bank sber par obshii rezultat 1 12 20,00 bank 20,00 300,000 0,00 320,00 2 12 300,00 sber 0 0 0 0 3 5 500,00 bank 500,00 0,00 0,00 500,00 4 6 100,00 par 0,00 0,00 100,00 100,00 5 10 500,00 bank 500,00 0,00 0,00 500,00 6 20 600,00 par 0,00 0,00 600,00 600,00 7 8 40,00 sber 0,00 120,00 0,00 120,00 9 8 80,00 sber 0,00 0 0,00 0 вот, что делаю я, но ни как не могу сообразить, как сделать, что все было в порядке с одинаковыми k_id declare @t money set @t=0 select *, 'bank'=case when zach='bank'then summa else 0 end, 'sber'=case when zach='sber'then summa else 0 end, 'par'=case when zach='par'then summa else 0 end, 'obshii rezultat'=@t+summa from tbs |
6 ноя 13, 16:28 [15085809] Ответить | Цитировать Сообщить модератору |
Александр52 Member Откуда: Кокосовые острова ส็็็็็ Сообщений: 5135 |
Airgolem, используйте обычный селект с группировкой (group by) по post, k_id, а так же при помощи функции sum(). |
6 ноя 13, 16:34 [15085869] Ответить | Цитировать Сообщить модератору |
Airgolem Member Откуда: Сообщений: 15 |
Msg 8120, Level 16, State 1, Line 3 Column 'tbs.t_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. ругается на меня |
||
6 ноя 13, 16:42 [15085943] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Airgolem, Покажите текст запроса. |
6 ноя 13, 16:57 [15086086] Ответить | Цитировать Сообщить модератору |
Airgolem Member Откуда: Сообщений: 15 |
Гость333, declare @t money set @t=0 select *, 'bank'=case when zach='bank'then summa else 0 end, 'sber'=case when zach='sber'then summa else 0 end, 'par'=case when zach='par'then summa else 0 end, 'obshii rezultat'=@t+summa from tbs group by k_id |
6 ноя 13, 17:05 [15086136] Ответить | Цитировать Сообщить модератору |
BuKTaP Member Откуда: Сообщений: 132 |
мысль: может вместо * явно укажите нужные поля? |
6 ноя 13, 17:12 [15086183] Ответить | Цитировать Сообщить модератору |
Airgolem Member Откуда: Сообщений: 15 |
BuKTaP, все таже ошибка, не помогло=( |
6 ноя 13, 17:32 [15086315] Ответить | Цитировать Сообщить модератору |
Гооооооссттььб
Guest |
Бред какой то, что выбираете где агрегаты ? |
6 ноя 13, 19:21 [15086879] Ответить | Цитировать Сообщить модератору |
Гооооооссттььб
Guest |
Declare @T Table(t_id int, k_id int,Summa money,Post varchar(20)) Insert into @T(t_id, k_id, Summa, Post) Values (1, 12, 20.00, 'bank' ), (2, 12, 300.00, 'sber' ), (3, 5, 500.00, 'bank' ), (4, 6, 100.00, 'par' ), (5, 10, 500.00, 'bank' ), (6, 20, 600.00, 'par' ), (7, 8, 40.00, 'sber' ), (9, 8, 80.00, 'sber' ) select k_id, Sum(case when Post ='Bank' then Summa else 0 end) As Bank, Sum(case when Post ='Sber' then Summa else 0 end) As Sber, Sum(case when Post ='Par' then Summa else 0 end) As Par From @T group by k_id |
6 ноя 13, 19:33 [15086918] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Гооооооссттььб, угу. мне тоже кажется, что ему это надо. + итог(obshii rezultat). но никак не пойму, что еще за "zach". declare @t table (t_id int, K_id int, Summa money, Post varchar(100)); insert into @t (t_id, K_id, Summa, Post) values (1, 12, 20, 'bank'), (2, 12, 300, 'sber'), (3, 5, 500, 'bank'), (4, 6, 100, 'par'), (5, 10, 500, 'bank'), (6, 20, 600, 'par'), (7, 8, 40, 'sber'), (9, 8, 80, 'sber') select K_id, sum(case post when 'bank' then Summa else 0 end) as bank, sum(case post when 'sber' then Summa else 0 end) as sber, sum(case post when 'par' then Summa else 0 end) as par, sum(Summa) as [obshii rezultat] from @t group by K_id ------------------------------------ K_id bank sber par obshii rezultat 5 500.00 0.00 0.00 500.00 6 0.00 0.00 100.00 100.00 8 0.00 120.00 0.00 120.00 10 500.00 0.00 0.00 500.00 12 20.00 300.00 0.00 320.00 20 0.00 0.00 600.00 600.00 |
6 ноя 13, 19:48 [15086971] Ответить | Цитировать Сообщить модератору |
Airgolem Member Откуда: Сообщений: 15 |
o-o, Спасибо большое всем за помощь=) |
7 ноя 13, 15:11 [15091326] Ответить | Цитировать Сообщить модератору |
Airgolem Member Откуда: Сообщений: 15 |
o-o, zach вместо post ошибся в названии в первой таблице, извините |
7 ноя 13, 15:22 [15091409] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
не, ну так не пойдет. Вы уж решите, надо собрать в одну строку с разными Post (как сейчас сделано) или по Post тоже группировать, но тогда какой смысл расписывать по столбцам и итог считать? получится же по строке на каждый Post, в каждой стоке будет всего одно ненулевое значение, как раз соответсвующее этому Post и идущее в одноименный столбец: declare @t table (t_id int, K_id int, Summa money, Post varchar(100)); insert into @t (t_id, K_id, Summa, Post) values (1, 12, 20, 'bank'), (2, 12, 300, 'sber'), (3, 5, 500, 'bank'), (4, 6, 100, 'par'), (5, 10, 500, 'bank'), (6, 20, 600, 'par'), (7, 8, 40, 'sber'), (9, 8, 80, 'sber') select K_id, Post, sum(case post when 'bank' then Summa else 0 end) as bank, sum(case post when 'sber' then Summa else 0 end) as sber, sum(case post when 'par' then Summa else 0 end) as par, sum(Summa) as [obshii rezultat] from @t group by K_id, Post order by 1, 2 -------------------------------------------- K_id Post bank sber par obshii rezultat 5 bank 500.00 0.00 0.00 500.00 6 par 0.00 0.00 100.00 100.00 8 sber 0.00 120.00 0.00 120.00 10 bank 500.00 0.00 0.00 500.00 12 bank 20.00 0.00 0.00 20.00 12 sber 0.00 300.00 0.00 300.00 20 par 0.00 0.00 600.00 600.00 |
||
7 ноя 13, 15:41 [15091677] Ответить | Цитировать Сообщить модератору |
Vaja_guest
Guest |
|
||
7 ноя 13, 16:14 [15092068] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |