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

Откуда:
Сообщений: 255
Добрый день, форумчане!
Подскажите как реализовать?Или может кто сталкивался...
В общем вопрос:
Есть база в акцессе,формируется база каждый день, используется база в качестве исходных данных для посл. расчета данных.
есть таблица с остатками у клиентов на определенный день.
данные гружу,всё замечательно, но столкнулся с проблемой. Нужно считать среднедневные остатки по кдиенту, считаю, но возникает проблема в том, что в акцессовской базе нет остатков на выходные, т.е. фактические остатки по проводимым документам.
при расчете средних, берется сумма остатков на день за нужный период и делиться на число фактических дней.
возникает расхождение., т.е. вылетают все субботы и воскресенья. Пример:
счет - дата - остатки
40505% - 2013-06-28 - 31000
40505% - 2013-07-01 - 14055440
40505% - 2013-07-02 - 50000
.........
.........
..........
если брать июль,то данные у меня есть по 5 июля, затем с 8 июля по 12, затем с 15,т.е. вылетают все выходные, а мне при расчете нужно учитывать остатки на выходные.
21 авг 13, 09:52    [14734200]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
сразу не написал, гружу данные из акцесс в ms sql
21 авг 13, 09:53    [14734204]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
кириллk
Member

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

"в акцессовской базе нет остатков на выходные" сделайте чтобы были.
21 авг 13, 09:57    [14734236]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
кириллk,
не могу я их там сделать, данные выгружаются автоматически с другой системы.
21 авг 13, 09:58    [14734245]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
denis_stell
кириллk,
не могу я их там сделать, данные выгружаются автоматически с другой системы.

ну сделайте их у себя. во время, или после выгрузки
21 авг 13, 10:06    [14734280]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

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

сделать где?в акцессе?а как?
21 авг 13, 10:12    [14734321]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Заведите себе таблицу-календарь и связывайте с ней по left join (date) за требуемый период.
В select еще AVG(ISNULL(summa,0)) надо будет не забыть - и все!
21 авг 13, 10:17    [14734346]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
ребят, сразу прошу прощения, никогда такое не делал, может туплю...
в общем,думаю что наверно не стоит заморачиваться на выходных днях именно, просто на днях, например есть остатки на 5 следующие 10 числа, нужно чтобы появились даты 6,7,8,9 с остатками равными на 5 число
21 авг 13, 10:17    [14734349]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
Cygapb-007,

в ms sql завесте таблицу- календарь?и как создать?можно загрузить откуда-нить?
21 авг 13, 10:25    [14734420]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
denis_stell
Cygapb-007,

в ms sql завесте таблицу- календарь?и как создать?можно загрузить откуда-нить?

понятно что должен быть поле тип дата, может id, но не знаю надо ли.
просто как загрузить?не в ручную же заполнять?
21 авг 13, 10:30    [14734440]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_stell
просто как загрузить?не в ручную же заполнять?

Если не можете вручную, то напишите скрипт
21 авг 13, 10:31    [14734444]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
сделал через хранимку скрипт
USE [RPL]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_temp_calendar](
         @begin_date DATETIME,
         @end_date DATETIME
    ) as
   
BEGIN
    declare @last_date datetime= @begin_date;
    CREATE TABLE calendar(
           [date_calendar] [DATETIME] NOT NULL
    ) ON [PRIMARY]
    
    WHILE @last_date <= @end_date
    begin
       insert into calendar(date_calendar) values(@last_date);
       SET @last_date = DATEADD(day,1,@last_date);
    END ;
  
END
21 авг 13, 12:59    [14735624]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
вроде заполняет
21 авг 13, 13:00    [14735631]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_stell
сделал через хранимку скрипт

И что календарь будет создаваться при каждом вызове ?
21 авг 13, 13:01    [14735640]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

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

вот блин не то скопировал, я извиняюсь, конечно же будет ошибка, таблица же уже существует....
21 авг 13, 13:08    [14735677]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_stell
вот блин не то скопировал, я извиняюсь, конечно же будет ошибка, таблица же уже существует....

Т.е. при каждом вызове в календарь будут добавляться данные ?
И пофиг, что они там уже есть ?
21 авг 13, 13:19    [14735752]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Cygapb-007
Member

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

один раз запустить на выполнение:
if OBJECT_ID('calendar','U') is not null drop table calendar;
CREATE TABLE calendar(
   date DATE NOT NULL constraint PK_Calendar primary key
  ,weekday tinyint -- день недели (0-пн, 6-вс)
  ,work BIT -- рабочий день=1 / выходной(праздник)=0
);
with nums as(select * from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9))v(n))
insert calendar
select 
   dateadd(DAY,d,'19500101'),
   (d+datediff(DAY,0,'19500101')%7)%7,
   case when (d+6)%7<5 then 1 else 0 end
from (
  select top 30000 
    row_number() over (order by (select 0))-1 d 
  from nums n1,nums n2,nums n3,nums n4,nums n5
  )d;

Далее - просто пользоваться:
select * from calendar where date between '20130801' and  '20130831' and work=0
21 авг 13, 13:56    [14736017]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

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

понятное дело что если будут повторы, проигнорирует и вставит...
написал для себя, без использования первичных ключей или каких либо проверок, это как пробный вариант.
21 авг 13, 14:00    [14736059]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
Cygapb-007,

спасибо,
Для моей задачи в принципи как я понимаю хватит и просто поле даты?
21 авг 13, 14:02    [14736077]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_stell
написал для себя, без использования первичных ключей или каких либо проверок, это как пробный вариант.

Календарь надо заполнить ОДИН раз.
На 100 лет вперед он займет 36500 записей
21 авг 13, 14:02    [14736082]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

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

понял,спасибо
21 авг 13, 14:13    [14736155]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
Ребят возвращаясь к первому моему посту, у меня есть таблица с остатками, есть таблица с датами.
Как теперь так сделать чтобы отсуствующие даты из первой таблицы заполнились остатками на прежнюю дату?
1) Конечно бы в идеале, для меня, если бы можно было бы проапдейтить эту таблицу и вставить остатки
2) Cygapb-007, писал что после создания таблицы - календаря, селектом с left join объеденить
Но как это сделать?
21 авг 13, 14:36    [14736349]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

Откуда:
Сообщений: 255
можно ли сделать без объединения таблиц?(left join,inner join итд)
21 авг 13, 14:40    [14736391]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_stell
можно ли сделать без объединения таблиц?

Можно. Добавить в таблицу с остатками записи для пропущенных дней.
21 авг 13, 14:44    [14736438]     Ответить | Цитировать Сообщить модератору
 Re: выходные дни,как перенести остатки  [new]
denis_stell
Member

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

а как?
можете помочь с запросом?
21 авг 13, 14:46    [14736462]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить