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

Откуда: KYIV
Сообщений: 4613
Есть потребители или абоненты или еще кто-то, не важно. У каждого есть оборотка (сальдо на начало месяца, начислено, оплата, сальдо на конец).

Как сделать отчет из оборотки – Долги по срокам возникновения?

Допустим, есть таблица с полями:
PERIOD - месяц
IDTU – код потребителя
SALDO – входящее сальдо
narah - начисления
OPLATA - оплата
4 июл 13, 18:50    [14524243]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Vad72
Как сделать отчет?

Как правильно оформить вопрос? п.4, п.6.
4 июл 13, 18:52    [14524255]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Vad72
Member [заблокирован]

Откуда: KYIV
Сообщений: 4613
Гость333
Vad72
Как сделать отчет?

Как правильно оформить вопрос? п.4, п.6.

Я понял. Просто у меня разные СУБД, ну и данные там по разному хранятся. Я просто везде приведу все к одному виду (sql-запросом, который будет возвращать эту оборотку в виде таблицы). А вот дальше .... Завтра допишу.
4 июл 13, 18:56    [14524279]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Vad72,

Из вашего вопроса как минимум непонятно, какой набор данных должен содержать отчёт "Долги по срокам возникновения", и как из исходных данных определяется этот самый "срок возникновения".
4 июл 13, 19:05    [14524313]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Vad72
Есть потребители или абоненты или еще кто-то, не важно. У каждого есть оборотка (сальдо на начало месяца, начислено, оплата, сальдо на конец).

Как сделать отчет из оборотки – Долги по срокам возникновения?
Обычно это делается с помощью команды SELECT.
4 июл 13, 19:53    [14524458]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Добрый Э - Эх
Guest
Vad72,

В первом приближении выглядит как банальная задача на накопительную сумму с последующей проверкой этой суммы на принадлежностью к долгу, а также с условием неизменности знака суммы с момента возникновения долга и до момента построения отчета.


З.Ы.
Надеюсь, ответил настолько же понятно и прозрачно, насколько понятно и прозрачно был задан твой вопрос ;)
4 июл 13, 20:19    [14524520]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
super-code
Member

Откуда:
Сообщений: 244
Бухгалтеров больше в форуме 1С, может они подскажут логику расчета Вашего отчета. Как алгоритм нам расскажете, так и запрос Вам напишут.
5 июл 13, 10:50    [14526066]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Добрый Э - Эх
Guest
Vad72, х.з., конечно, что тебе надо, но если я правильно понял, то примерно что-то такое:
--
-- Набор тестовых данных:
with
  t (period, idtu, saldo, narah, oplata) as
    (
      select *
        from (values
                ('2013-01', 1,   0, 10, 11),
                ('2013-02', 1,   1, 10,  9),
                ('2013-03', 1,   0, 10,  8),
                ('2013-04', 1,  -2, 10,  7),
                ('2013-05', 1,  -5, 10, 15),
                ('2013-06', 1,   0, 10, 10),
--      
                ('2013-01', 2,   0, 10, 10),
                ('2013-02', 2,   0, 10, 10),
                ('2013-03', 2,   0, 10,  8),
                ('2013-04', 2,  -2, 10,  9),
                ('2013-05', 2,  -3, 10,  9),
                ('2013-06', 2,  -4, 10,  9),
--
                ('2013-01', 3,   0, 10,  8),
                ('2013-02', 3,  -2, 10,  7),
                ('2013-03', 3,  -5, 10,  6),
                ('2013-04', 3,  -9, 10,  5),
                ('2013-05', 3, -14, 10, 10),
                ('2013-06', 3, -14, 10, 10)
              ) as v (p,i,s,n,o)
    )
--
-- Основной запрос (требуется MS SQL Server 2012):
select idtu, min(period) as x_date
  from (
         select t.*, saldo - narah + oplata as out_saldo,
                sum(case when (oplata + saldo) > 0 then 1 else 0 end)
                  over(partition by idtu order by period desc) as x_flag
           from t
       ) as v
 where x_flag = 0
 group by idtu
On-line проверка на sqlfiddle.com

Если сервер НЕ 2012, то заменить накопительный итог SUM(...) OVER(... ORDER BY... ) на вариант, посильный для версии твоего MS SQL Server-а ([cross | outer] apply, scalar subquery, self-join + group by, etc.)
5 июл 13, 11:15    [14526239]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Vad72
Member [заблокирован]

Откуда: KYIV
Сообщений: 4613
У меня СУБД разные и разная структура БД. SQL-запросами я привел все к одному виду:

Картинка с другого сайта.

Далее есть решение, которое я сделал в Екселе

Картинка с другого сайта.

Осталось придумать SQL-запрос.
Идея в том, что оплату потребитель может делать в любом размере, все поступившие деньги сначала гасят самые старые долги. На картинке видно, что вх.сальдо 277.58 разбилось так:
66.71 - 01-03-2013
35.59 - 01-02-2013
175.28 - 01-01-2013

К сообщению приложен файл (оборотка тестовая быт.xls - 32Kb) cкачать
5 июл 13, 12:28    [14526892]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Vad72
Member [заблокирован]

Откуда: KYIV
Сообщений: 4613
Добрый Э - Эх,
спасибо, но не выполняется :(
попробую осмыслить содержимое
Сообщение 102, уровень 15, состояние 1, строка 36
Неправильный синтаксис около конструкции "order".


Вот эту строку не понимает
over(partition by idtu order by period desc) as x_flag



У меня MS Server 2008
Microsoft SQL Server Management Studio 10.0.1600.22 ((SQL_PreRelease).080709-1414 )
Компоненты доступа к данным (MDAC) 2000.086.4412.00 (srv03_sp2_qfe.081118-1209)
Microsoft MSXML 2.6 3.0 4.0 5.0 6.0
Microsoft Internet Explorer 8.0.6001.18702
Microsoft .NET Framework 2.0.50727.3053
Операционная система 5.2.3790
5 июл 13, 12:36    [14526940]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Vad72,

вам же написали ,что решение для сиквела 2012,а у вас 2008
5 июл 13, 12:47    [14527020]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Добрый Э - Эх
Guest
Vad72,

Я же не просто так упомянул про версию сервера (2012) :)
На 2008-ом в таком виде и в самом деле работать не будет. Нужно накопительный итог считать по старинке.
Для понимания же решения и его состоятельности применительно к твоей задачи можно потренироваться на кошках: ссылко
5 июл 13, 12:47    [14527023]     Ответить | Цитировать Сообщить модератору
 Re: Нужен текст SQL запроса  [new]
Vad72
Member [заблокирован]

Откуда: KYIV
Сообщений: 4613
Добрый Э - Эх
Vad72,

Я же не просто так упомянул про версию сервера (2012) :)
На 2008-ом в таком виде и в самом деле работать не будет. Нужно накопительный итог считать по старинке.
Для понимания же решения и его состоятельности применительно к твоей задачи можно потренироваться на кошках: ссылко


ого, как все зашло далеко вперед, чувствую, что я отстал безнадежно от новых технологий
5 июл 13, 12:51    [14527050]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить