powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с запросом
23 сообщений из 23, страница 1 из 1
Помогите с запросом
    #32665042
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица:
ID (identity)|Smena| Date | SingleSum
1 01.02.04 458
2 01.02.04 587
1 02.02.04 188
2 02.02.04 168
1 03.02.04 234
2 03.02.04 576
1 04.02.04 237
2 04.02.04 766

Нужно создать выборку сумм по дате за два периода напрмер с 1 по 2 и с 3 по 4 чтобы получилось:
период1 | период2
1045 810
356 1003
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665050
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665098
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм... Немного не в тему, кроме того я не настолько силен в sql, чтобы разобраться в смысле того, что там понаписано
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665112
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом задается период?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665154
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Where Date>=... and Date<=... для каждого периода, их всего 2
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665173
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
select (select sum(SingleSum) from MyTable Where Date>=... and Date<=... ) as период1,
(select sum(SingleSum) from MyTable Where Date>=... and Date<=... ) as период2 
from MyTable
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665178
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вторая редакция
Код: plaintext
1.
2.
3.
4.
select (select sum(SingleSum) from MyTable 
Where Date>=... and Date<=... Group by DATE) as период1,
(select sum(SingleSum) from MyTable 
Where Date>=... and Date<=... Group by DATE) as период2 
from MyTable
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665187
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
a.Select smena,a.s1 as Period1,b.s2 as Period1
FROM
      (select smena,sum(SingleSum)  as s1 from table t
       where  t.[Date] between  # 02 / 01 / 04 # AND # 02 / 01 / 04 #
       group by smena) as a
INNER JOIN
      (select smena,sum(SingleSum) as s2 from table t
      where t.[Date] between  # 03 / 01 / 04 # AND # 04 / 01 / 04 #
      group by smena) as b
on a.smena=b.smena
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665200
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
a.Select smena,a.s1 as Period1,b.s2 as Period1
FROM
      (select smena,sum(SingleSum)  as s1 from table t
       where  t.[Date] between  # 02 / 01 / 04 # AND # 02 / 01 / 04 #
       group by smena) as a
INNER JOIN
      (select smena,sum(SingleSum) as s2 from table t
      where t.[Date] between  # 03 / 01 / 04 # AND # 04 / 01 / 04 #
      group by smena) as b
on a.smena=b.smena

Куль :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665203
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG
Группировка все таки по дате нужна.
А поле Smena я в примере вообще не вижу :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665229
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All
Не канает
2 Vsevolod V 2я редакция
Выдает ошибку: Подзапрос должен выдавать одно значение
2 (c)VIG
Смены игнорируем, нужны суммы за каждый целый день
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665239
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
PARAMETERS 
     DATE1 DateTime,
     DATE2 DateTime,
     DATE3 DateTime,
     DATE4 DateTime;
TRANSFORM Sum([~t].SingleSum) AS [Значение]
SELECT [~t].Smena
FROM [~t]
WHERE ((Not (Switch([Date] Between [Date1] And [Date2],
    "Период 1",
    [Date] Between [Date3] And [Date4],
    "Период 2")) Is Null))
GROUP BY [~t].Smena
PIVOT
    Switch([Date] Between [Date1] And [Date2],
    "Период 1",
    [Date] Between [Date3] And [Date4],
    "Период 2")
    IN ("Период 1","Период 2");
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665242
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСмены игнорируем, нужны суммы за каждый целый день

А что, разве сказано, что периоды обязательно равной величины?

2 VIG
Порядковый день периода/Значение по периоду 1/Значение по периоду 2
1/1045/810
2/356/1003
3/число/????
, если я правильно понял.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665248
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, а у VIG а еще INNER JOIN может крякнуться при отсутствии данных в одном из периодов (тут нужен FULL OUTER JOIN)


по поводу игнорирования не понял. Откуда 2 строки?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665263
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Geo: понял правильно, а периоды подразумеваются равной длины, но мало ли что юзверь поставит
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665266
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Автор
Покажи, пожалуйста, требуемый результат для таких данных:

D (identity)|Smena| Date | SingleSum
1 01.02.04 458
2 03.02.04 168
2 04.02.04 766
1 05.02.04 234
2 06.02.04 576
2 07.02.04 576


И заданных периодов:
с 1/02/04 по 3/02/04
с 4/02/04 ао 7/02/04
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665293
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Geo
См. самое начало, данные именно в таком виде: выручка 1й смены за день, выручка 2й смены за день, так же за следующий день, исключений не бывает. Твой пример данных не подходит.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665348
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, понял.

Тогда (но только для непересекающихся периодов):


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
PARAMETERS
    DATE1 DateTime,
    DATE2 DateTime,
    DATE3 DateTime,
    DATE4 DateTime;
TRANSFORM Sum([~t].SingleSum) AS [Значение]
SELECT
    Switch([Date] Between [Date1] And [Date2],
    [Date]-[Date1],
    [Date] Between [Date3] And [Date4],
    [Date]-[Date3]) AS NDay
FROM [~t]
WHERE
    ((Not (Switch([Date] Between [Date1] And [Date2],
    "Период 1",[Date] Between [Date3] And [Date4],
    "Период 2")) Is Null))
GROUP BY
    Switch([Date] Between [Date1] And [Date2],
   [Date]-[Date1],
   [Date] Between [Date3] And [Date4],
   [Date]-[Date3])
PIVOT
    Switch([Date] Between [Date1] And [Date2],
   "Период 1",[Date] Between [Date3] And [Date4],
   "Период 2") In ("Период 1","Период 2");
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665425
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 assa: Круто, под акцессом работает, но мне нужно этот запрос выполнять из VB, а под ним ругань: слишком мало параметров - требуется 2
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665460
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для (в том числе) пересекающихся периодов - что -то вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
PARAMETERS DATE1 DateTime, DATE2 DateTime, DATE3 DateTime, DATE4 DateTime;
SELECT NDay,  Sum([sПериод1]) AS Период1,   Sum([sПериод2]) AS Период2
FROM 
(
      SELECT [Date]-[Date1] AS NDay, 
       Sum([SingleSum]) AS sПериод1,  0  as sПериод2
      FROM [~t]
      WHERE [Date] Between [Date1] And [Date2]
      GROUP BY [Date]-[Date1]
      UNION ALL
      SELECT [Date]-[Date3] AS NDay,  0  AS sПериод1, Sum([SingleSum]) AS sПериод2
      FROM [~t]
      WHERE [Date] Between [Date3] And [Date4]
      GROUP BY [Date]-[Date3]
) AS q
GROUP BY NDay ;

- не могу проверить - 97 - приходится подзапрос выделять в отдельный (и переносит туда параметры).


__
ЗЫ для VB э-убери объявления а-параметров и а-строку а-шей а-в-коде (вшивай даты в SQL-строку вместо [DATEx]).
...
Рейтинг: 0 / 0
Помогите с запросом
    #32665732
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, ну когда уже народ научиться нормально обьяснять ,что требуется.
Ну ,если действительно авторданные именно в таком виде: выручка 1й смены за день, выручка 2й смены за день, так же за следующий день, исключений не бывает то можно так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select q1.Period1,q2.Period2
from
(
 select n,sum(SingleSum) as Period1
 from
 (
  select [date],SingleSum,(select count(*) from table as t1 where   t1.[date]<=t.[date]) as n
  from table as t
  where t.date between d11 and d12) as a
  group by n
) as q1
INNER JOIN
(
 select n,sum(SingleSum) as Period2
 from
 (
  select [date],SingleSum,(select count(*) from table as t1 where t1.[date]<=t.[date]) as n
  from table as t
  where t.date beetween d21 and d22) as a
  group by n
) as q2
ON q1.n=q2.n
...
Рейтинг: 0 / 0
Помогите с запросом
    #32666121
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIGНу ,если действительно... автор...исключений не бывает

Опытный программер такие заявления воспринимает с точностью до наоборот

Ибо...
...
Рейтинг: 0 / 0
Помогите с запросом
    #32668002
Евгений12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я верно понял автору необходимо сравнить два периода по месяцам, например:
период 1 с 01.02.04 по 02.02.04 |период 2 с 03.02.04 по 04.02.04
или
период 1 с 01.02.04 по 02.02.04 |период 2 с 06.02.04 по 08.02.04
в общем разне периоды до нескольких лет например (в том числе и пересекающиеся
период 1 с 01.02.04 по 05.02.04 |период 2 с 04.02.04 по 09.02.04
причем количество дней в периода 1 = кол дням периода 2
Есть такой вариант:
(5 запросов. одним не могу)
поля таблица1
DateDat
SingleSum

запрос "Серия1"
PARAMETERS [начало периода] DateTime, [конец периода] DateTime;
SELECT t1.DateDat AS DateDatS1, Sum(t1.SingleSum) AS Sum_SingleSum
FROM Таблица1 AS t1
GROUP BY t1.DateDat
HAVING (((t1.DateDat)>=[начало периода] And (t1.DateDat)<=[конец периода]));

Запрашивает начало и конец периода
________________________________________
Запрос "Серия2"
PARAMETERS [Выберете интервал] Long;
SELECT t1.DateDat, Sum(t1.SingleSum) AS Sum_SingleSum
FROM Таблица1 AS t1
GROUP BY t1.DateDat
HAVING ((([t1].[DateDat])>=DateAdd("d",[Выберете интервал],(select min(Серия1.DateDatS1) from Серия1)) And ([t1].[DateDat])<=DateAdd("d",[Выберете интервал],(select max(Серия1.DateDatS1) from Серия1))));

Запрашивает интервал и в зависимости от начала и конца преиода выбранного в первом запросе выбирает соответствующие начало и конец второго периода.
Например интервал равный 3 выберет для второго периода даты на три мес позже(01.02.04 > 01.05.04 и т.д.)
_______________________________________
Запрос "Серия12"
SELECT S1.DateDatS1, S1.Sum_SingleSum, (select sum(1) from Серия1 S2 where S1.DateDatS1 >= S2.DateDatS1) AS номер
FROM Серия1 AS S1;

Нумерует строки "Серия1"(повозрастанию дат) для последующего сведения
_______________________________________
Запрос "Серия22"
SELECT S1.DateDat, S1.Sum_SingleSum, (select sum(1) from Серия2 S2 where S1.DateDat >= S2.DateDat) AS номер
FROM Серия2 AS S1;

Нумерует строки "Серия2"(повозрастанию дат) для последующего сведения
_______________________________________
Запрос "СерияAll"
SELECT Серия12.DateDatS1, Серия12.Sum_SingleSum, Серия22.DateDat, Серия22.Sum_SingleSum
FROM Серия12 INNER JOIN Серия22 ON Серия12.номер = Серия22.номер;

Сводит всё до кучи
PS. По моему все работает с любым количеством дней в периодах, и с пересекающимися датами тоже.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]