2012-02-17 2 views
1

я в настоящее время есть таблица, которая выглядит следующим образом:Подавить строки в MS Access (связанные с объединения нескольких строк в одной строке в MS Access)

Имя --- Cat --- Desc --- Трэш --- Проц --- Err --- BP --- Дата

Bob ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- ADC2- -12/02/2011
Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 2 ----- BAC2--09/05/2011
Боб ------- C1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- RBE2-11/02/2011
Боб ------- C1 ------- Inf -------- 7Per-- ------ 0.05 ------ 8 ----- VBE2--08/14/2012
Боб ------- C1 ------- Inf ---- ---- 7Per -------- 0.05 ------ 6 ----- AEC2--02/25/2009
Боб ------- C1 ----- --Inf -------- 7Per -------- 0.05 ------ 0 ----- PBC2--07/02/2011
Bob ------ -C2 ------- Com ------ 8Per -------- 0,45 ------ 1 ----- XBC4--09/05/2011
Bob - ------ С2 --- ---- Com ------ 8Per -------- 0,45 ------ 0 ----- AEC2--02/02/2010
Bob ------ -C2 ------- Com ------ 8Per -------- 0,45 ------ 0 ----- PBC2--08/14/2012
Bob - ------ С2 ------- ------ Ком 8Per -------- 0,45 ------ 3 ----- ADC2--05/05/2001
Bob ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0 ----- ADC2- -08/02/2010
Bob ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 0-- --- BAC2--06/17/2010
Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- PBC2--08/14/2012
Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- ZTM2--09/05/2011
Joe -------- C1 ------- Inf- -------- 7Per -------- 0,05 ------ 2 ----- QYC2- -05/17/2010
Joe -------- C1 ------- Inf --------- 7Per -------- 0.05 ----- -0 ----- FLC2--3/19/2010
Joe -------- C1 ------- Inf --------- 7Per ----- --- 0.05 ------ 1 ----- KSC2--09/05/2011
Joe -------- C1 ------- Inf ------ --- 7Per -------- 0.05 ------ 0 ----- JYC2--08/14/2012

Предположим, я хотел построить запрос, чтобы сказать что-то вроде: показать мне все записи до сих пор в этом же формате:

Имя --- Cat --- Desc --- Трэш --- Проц --- Err --- ВР
Боб ------- С1 ------- Inf -------- 7Per- ------- 0.05 ----- 16 ----- BAC2, VBE2, AEC2
Bob ------- C2 ------ Com ------ 8Per- ------- 0.45 ------ 4 ------ XBC4, ADC2
Joe -------- C1 ------- Inf ------ --7Per -------- 0.05 ------ 3 ------ QYC2, KSC2

Но для диапазона дат 01/01/2009 до 09/31/2011

я использовал функцию, созданную по http://allenbrowne.com/func-concat.html Allen Browne в сочетании со следующим SQL

SELECT 
    [Name], 
    [Cat], 
    [Desc], 
    [Thresh], 
    [Perc], 
    sum([Err]), 
    ConcatRelated("[BP]", "make_table_bp", "[Err] = " & [BP]) 
FROM make_table_bp 
GROUP BY 
    [Name], 
    [Cat], 
    [Desc], 
    [Thresh], 
    [Perc], 
    [Err], 
    [BP]; 

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

Произнесите запрос был следующим:

SELECT 
    sub.[Name], 
    sub.Cat, 
    sub.[Desc], 
    sub.Thresh, 
    sub.Perc, 
    sub.SumOfErr, 
    ConcatRelated("BP", 
     "make_table_bp", 
     "[Err] > 0 AND [Name] = '" & sub.[Name] 
     & "' AND Cat = '" 
     & sub.Cat & "'", 
     "BP") 
     AS concat_BP 
FROM 
    (SELECT 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc, 
     Sum(q.[Err]) AS SumOfErr 
    FROM make_table_bp AS q 
    GROUP BY 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc 
    ) AS sub 
ORDER BY 
    sub.Name, 
    sub.Cat; 

ответ

1

Включить ИНЕКЕ, чтобы ограничить диапазон [Дата] значения. Вам также нужно будет сделать то же самое для третьего аргумента функции ConcatRelated. (Это третий аргумент служит той же цели, что и где положение в запросе.)

В основном запросе:

FROM make_table_bp 
WHERE [Date] >= #01/01/2009# AND [Date] <= #09/30/2011# 
GROUP BY 

А для функции:

ConcatRelated("[BP]", "make_table_bp", "[Err] = " & [BP] 
    & " AND [Date] >= #01/01/2009# AND [Date] <= #09/30/2011#") 

Это предположение основано на два предположения.

  1. Пример запроса в вашем вопросе делает то, что вы хотите, за исключением того, что ограничиваете результаты диапазоном [Дата].
  2. Поле [Дата] - это тип данных Дата/Время.

Редактировать: Только что просмотрел последнюю версию запроса в обновленном вопросе. Я подозревал, что это произойдет. Так что попробуйте это:

SELECT 
    sub.[Name], 
    sub.Cat, 
    sub.[Desc], 
    sub.Thresh, 
    sub.Perc, 
    sub.SumOfErr, 
    ConcatRelated("BP", 
     "make_table_bp", 
     "[Err] > 0 AND [Name] = '" & sub.[Name] 
     & "' AND Cat = '" 
     & sub.Cat 
     & "' AND [Date] >= #01/01/2009# AND [Date] <= #09/30/2011#", 
     "BP") 
     AS concat_BP 
FROM 
    (SELECT 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc, 
     Sum(q.[Err]) AS SumOfErr 
    FROM make_table_bp AS q 
    WHERE [Date] >= #01/01/2009# AND [Date] <= #09/30/2011# 
    GROUP BY 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc 
    ) AS sub 
ORDER BY 
    sub.Name, 
    sub.Cat; 
+0

, когда я выполнить приведенный выше запрос, я получаю сообщение об ошибке: «Ошибка синтаксиса в день в выражении запроса«[Date]> = # 01/01/2009 # и [Дата] <= # 09/31/2011 #. – JT2013

+0

Символ # является разделителем для значений даты/времени. Каков тип данных вашего поля [Date] в таблице make_table_bp? Это дата/время или текст? – HansUp

+0

у поля есть тип данных Дата/Время ... – JT2013

Смежные вопросы