Запрос на выборку, По недельно/кумулятивно

wooof11
Дата: 12.11.2009 12:51:01
Доброго времени суток,

помогите с решение задачи. Есть таблица из нескольких колонок (см. вложение). Необходимо сформировать запрос, который будет выводить понедельно количество событий, т.е.

Неделя Событие 1 Событие 2 ...
нед. 1 1 0
нед. 2 5 2
нед. 3 1 10

по каждому из столбцов независимо. + тоже самое накопительным итогом (отдельный запрос судя по всему будет, не проблема).
Rivkin Dmitry
Дата: 12.11.2009 13:39:52
А в чем, собственно, проблема? Покажи что делал, что не получается.
вот такой кахмар))
Дата: 12.11.2009 14:08:53
SELECT 'нед.' & CStr(a.Num) As 'Неделя', 
(SELECT COUNT( DatePart("ww",T.[Событие 1])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 1])) As [Событие 1],
(SELECT COUNT( DatePart("ww",T.[Событие 2])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 2])) As [Событие 2],
(SELECT COUNT( DatePart("ww",T.[Событие 3])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 3])) As [Событие 3],
(SELECT COUNT( DatePart("ww",T.[Событие 4])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 4])) As [Событие 4],
(SELECT COUNT( DatePart("ww",T.[Событие 5])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 5])) As [Событие 5],
(SELECT COUNT( DatePart("ww",T.[Событие 6])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 6])) As [Событие 6],
(SELECT COUNT( DatePart("ww",T.[Событие 7])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 7])) As [Событие 7],
(SELECT COUNT( DatePart("ww",T.[Событие 8])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 8])) As [Событие 8],
(SELECT COUNT( DatePart("ww",T.[Событие 9])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 9])) As [Событие 9],
(SELECT COUNT( DatePart("ww",T.[Событие 10])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 10])) As [Событие 10],
(SELECT COUNT( DatePart("ww",T.[Событие 11])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 11])) As [Событие 11],
(SELECT COUNT( DatePart("ww",T.[Событие 12])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 12])) As [Событие 12],
(SELECT COUNT( DatePart("ww",T.[Событие 13])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 13])) As [Событие 13],
(SELECT COUNT( DatePart("ww",T.[Событие 14])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 14])) As [Событие 14],
(SELECT COUNT( DatePart("ww",T.[Событие 15])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 15])) As [Событие 15],

(SELECT COUNT( DatePart("ww",T.[Событие 1])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 1])) +
(SELECT COUNT( DatePart("ww",T.[Событие 2])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 2])) +
(SELECT COUNT( DatePart("ww",T.[Событие 3])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 3])) +
(SELECT COUNT( DatePart("ww",T.[Событие 4])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 4])) +
(SELECT COUNT( DatePart("ww",T.[Событие 5])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 5])) +
(SELECT COUNT( DatePart("ww",T.[Событие 6])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 6])) +
(SELECT COUNT( DatePart("ww",T.[Событие 7])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 7])) +
(SELECT COUNT( DatePart("ww",T.[Событие 8])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 8])) +
(SELECT COUNT( DatePart("ww",T.[Событие 9])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 9])) +
(SELECT COUNT( DatePart("ww",T.[Событие 10])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 10])) +
(SELECT COUNT( DatePart("ww",T.[Событие 11])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 11])) +
(SELECT COUNT( DatePart("ww",T.[Событие 12])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 12])) +
(SELECT COUNT( DatePart("ww",T.[Событие 13])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 13])) +
(SELECT COUNT( DatePart("ww",T.[Событие 14])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 14])) +
(SELECT COUNT( DatePart("ww",T.[Событие 15])) FROM T WHERE a.Num= DatePart("ww",T.[Событие 15])) As [Событие All]

FROM WeeksNum a

T - ваша таблица
WeeksNum - таблица с одной колонкой Num, c числами от 1 до 53
а кумулятивно , это как?
Дата: 12.11.2009 14:27:20
может так?
SELECT 'нед.' & CStr(a.Num) As 'Неделя', 
(SELECT COUNT( DatePart("ww",T.[Событие 1])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 1])) As [Событие 1],
(SELECT COUNT( DatePart("ww",T.[Событие 2])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 2])) As [Событие 2],
(SELECT COUNT( DatePart("ww",T.[Событие 3])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 3])) As [Событие 3],
(SELECT COUNT( DatePart("ww",T.[Событие 4])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 4])) As [Событие 4],
(SELECT COUNT( DatePart("ww",T.[Событие 5])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 5])) As [Событие 5],
(SELECT COUNT( DatePart("ww",T.[Событие 6])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 6])) As [Событие 6],
(SELECT COUNT( DatePart("ww",T.[Событие 7])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 7])) As [Событие 7],
(SELECT COUNT( DatePart("ww",T.[Событие 8])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 8])) As [Событие 8],
(SELECT COUNT( DatePart("ww",T.[Событие 9])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 9])) As [Событие 9],
(SELECT COUNT( DatePart("ww",T.[Событие 10])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 10])) As [Событие 10],
(SELECT COUNT( DatePart("ww",T.[Событие 11])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 11])) As [Событие 11],
(SELECT COUNT( DatePart("ww",T.[Событие 12])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 12])) As [Событие 12],
(SELECT COUNT( DatePart("ww",T.[Событие 13])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 13])) As [Событие 13],
(SELECT COUNT( DatePart("ww",T.[Событие 14])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 14])) As [Событие 14],
(SELECT COUNT( DatePart("ww",T.[Событие 15])) FROM T WHERE a.Num >= DatePart("ww",T.[Событие 15])) As [Событие 15]

FROM WeeksNum a
mds_world
Дата: 13.11.2009 08:42:19
Если число событий переменное и лист Exell может содержать данные не только одного года, то полезен динамический запрос.

wooof11, не знаю как вы екселевские данные в аксе держите - запросом или табличку сделали. Это не суть. Предположим, что у вас есть запрос, которым получаете данные из Example.xls. Например такой (тоже с названием "Example")
SELECT * FROM [sheet1$] IN 'C:\Temp\Example.xls'[Excel 8.0;HDR=yes;]

Создаем процедуру, которая сначала вытягивает все события в одно поле, но с указанием имени события, а затем находит количество событий понедельно и, также, группируя их по году
Sub example()
    Dim qdf As QueryDef, s, fld As Field
    Set qdf = CurrentDb.QueryDefs("example")
    For Each fld In qdf.Fields
        If InStr(1, fld.Name, "Событие") > 0 Then
            s = s & " Union all select [Объект №], [" & fld.Name & "] as sb, '" & fld.Name & "' as namesb from example "
        End If
    Next
    s = Mid(s, 11)
    s = "select year(sb) as [Год], datepart('ww',sb,2) as [Номер недели], count(*) as [Кол-во событий] from (" & s
    s = s & ") where sb is not null group by year(sb), datepart('ww',sb,2) "
    Debug.Print s
End Sub
В резеультате, в переменной s будет текст запроса, выполняющего подсчет событий

Если же у вас не запрос, а таблица, то вместо QueryDefs надо использовать TableDefs.