Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как уместить в одном запросе ? [D6, MSSQL]


wed ©   (2002-09-23 12:11:00) 

запрос
select k.name, sum(n.summ) as zs
from nakl n, klients k
where n.klient=k.klient
and year(dd_data)=2002
and month(dd_data)=9
group by k.name
order by k.name
т.е. выводится сумма продаж за сентябрь.
Можно ли вывести так:
наименование, сумма за август, сумма за сентябрь ....

спасибо.


3JIA9I CyKA   (2002-09-23 15:11:00) [1]

Может быть, я чтото не то делаю, но мне не удалось удостовериться в работоспособности такого запроса. И в BOL-е ничего такого нет. Что это такое ?!


maximen   (2002-09-23 13:20:00) [2]

А про перекрестные запросы Вы никогда не слышали???? Они для этого и предназначены!

TRANSFORM Sum(Query_All.dsumm) AS [Sum-dsumm]
SELECT Query_All.klient
FROM Query_All
GROUP BY Query_All.klient
PIVOT Query_All.Month;


Marcus   (2002-09-23 12:37:00) [3]

-- Самый простой, но и самый объемный вариант такой:
create table #results (ID int identity, SumAugust float null, SumSeptember float null, ...)

declare @ID int

insert #results (SumAugust)
select sum(n.summ) from nakl n, klients k
where n.klient=k.klient
and year(dd_data)=2002
and month(dd_data)=8
group by k.name
order by k.name

select @ID = @@identity

update #results
set SumSeptember =
(select sum(n.summ) from nakl n, klients k
where n.klient=k.klient
and year(dd_data)=2002
and month(dd_data)=9
group by k.name
order by k.name)
where ID = @ID

...

select * from #results

-- Можно попробовать и так

сreate table #results (ID int identity, Sum1 float null, Sum2 float null, ... Sum12 float null)

declare @ID int, @Month int, @FieldName sysname
select @Month = 1

while (@Month < 13)
begin
select @FieldName = "Sum" + convert(varchar(2), @Month)

exec ("insert #results (" + @FieldName + ")
select sum(n.summ) from nakl n, klients k
where n.klient=k.klient
and year(dd_data)=2002
and month(dd_data)=" + @Month +
" group by k.name order by k.name")

if @Month = 1 select @ID = @@identity

-- ну и так далее, как в предыдущем примере

select @Month = @Month + 1
end


wed   (2002-09-23 12:25:00) [4]

и оригиналный примерчик пжалста...


Johnmen   (2002-09-23 12:24:00) [5]

Общий принцип :
SELECT k.name,(SELECT SUM <за авг.>),(SELECT SUM <за сент.>),...
WHERE ...
GROUP BY ...
ORDER BY ...


3JIA9I CyKA   (2002-09-23 12:20:00) [6]

Да


Наверх

Титульная страница Поиск, карта сайта Написать письмо