Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Помогите еще раз с запросом!


Автор: masik 31.1.2007, 12:48
Пару дней назад спрашивала об одном запросе...теперь для меня задача усложнилась.... smile 
Есть таблица с полями: остаток_по_кредиту, дни_просрочки,Точка.
Нужно выбрать сумму остатков для тех кредитов, где просрочка>1, потом те, где просрочка>30,>60 для каждой точки.
Каждую сумму нужно разделить на общую сумму остатка для этой точки.

Вот мой нерабочий код: smile 



Код

select a.Точка,sum(a.по_кредиту)/(select sum(по_кредиту) from dbo."200605" b where b.Точка = a.Точка),
       sum(c.по_кредиту)/(select sum(по_кредиту) from dbo."200606" b where b.Точка = c.Точка)
from dbo."200605" a,dbo."200605" c
where  a.проср_дней > 1 and c.проср_дней > 1
group by a.Точка,c.Точка
order by a.Точка,c.Точка


Спасибо заранее! Очень жду помощи, нужно срочно по работе!

Автор: IrStG 4.2.2007, 13:50
select '>1',a.точка,sum(a.по_кредиту)/(select sum(b.по_кредиту) from dbo."200605" b where b.точка=a.точка group by точка) from dbo."200605" a where a.проср_дней>1 group by точка 
union
select '>30',a.точка,sum(a.по_кредиту)/(select sum(b.по_кредиту) from dbo."200605" b where b.точка=a.точка group by точка) from dbo."200605" a where a.проср_дней>30 group by точка 
union 
select '>60',a.точка,sum(a.по_кредиту)/(select sum(b.по_кредиту) from dbo."200605" b where b.точка=a.точка group by точка) from dbo."200605" a where a.проср_дней>60 group by точка 

так не подойдет ? 

Автор: masik 5.2.2007, 15:43
Спасибо большое, у меня тоже были такие варианты, но просто потом мне нужно будет делать union с другим запросом...таким же, только с другой таблицы, поэтому нужно выбрать в строчку данные.... smile 

Очень жду помощи, извините за такие вопросы.....

Автор: AndySphinx 5.2.2007, 17:52
masik посмотри вот это

SELECT s_all.Точка, s1.sum_по_кредиту / s_all.sum_по_кредиту AS del1
      , s30.sum_по_кредиту / s_all.sum_по_кредиту AS del30
      , s60.sum_по_кредиту / s_all.sum_по_кредиту AS del60
  FROM (SELECT   Точка, SUM(по_кредиту) AS sum_по_кредиту
            FROM dbo."200605"
        GROUP BY Точка) s_all
      ,(SELECT   Точка, SUM(по_кредиту) AS sum_по_кредиту
            FROM dbo."200605"
           WHERE проср_дней > 1
        GROUP BY Точка) s1
      ,(SELECT   Точка, SUM(по_кредиту) AS sum_по_кредиту
            FROM dbo."200605"
           WHERE проср_дней > 30
        GROUP BY Точка) s30
      ,(SELECT   Точка, SUM(по_кредиту) AS sum_по_кредиту
            FROM dbo."200605"
           WHERE проср_дней > 60
        GROUP BY Точка) s60
 WHERE s_all.Точка *= s1.Точка AND s_all.Точка *= s30.Точка
       AND s_all.Точка *= s60.Точка

то что сразу будет работат, не гарантирую (писал под Oracle), но идея может поможет

Автор: masik 5.2.2007, 18:28
AndySphinx, ОГРОМНОЕ тебе спасибо!

Во-первых, все заработала с первого раза именно так, как ты написал smile 
Во-вторых, очень нужна была именно ИДЕЯ, как это делается в принципе!Опыта работы с SQL почти нет smile  без опытных советов  не разобраться smile 

Пасибки еще раз!

Автор: Spectre12 28.2.2007, 10:51
Спасибо большое smile
Теперь я свой запрос сделал =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)