подавление строк в MS Access (связано с объединением нескольких строк в одну строку в MS Access) - PullRequest
1 голос
/ 17 февраля 2012

В настоящее время у меня есть таблица, которая выглядит следующим образом:

Имя --- Кошка --- Описание --- Thresh --- Perc --- Err --- BP --- Дата

Боб ------- C1 ------- Inf -------- 7Per -------- 0,05 ------ 0 -----ADC2-12-12 / 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
Боб ------- C2 ------- Com ------ 8Per -------- 0.45 ------ 1 ----- XBC4--09/ 05/2011
Боб ------- C2 ------- Com ------ 8Per -------- 0,45 ------ 0 -----AEC2--02 / 02/2010
Боб ------- C2 ------- Com ------ 8Per -------- 0,45 ------0 ----- PBC2--08 / 14/2012
Боб ------- C2 -------Com ------ 8Per -------- 0,45 ------ 3 ----- ADC2--05 / 05/2001
Боб -------C2 ------- Com ------ 8Per -------- 0,45 ------ 0 ----- ADC2--08 / 02/2010
Боб ------- С2 ------- ------ Ком 8Per -------- 0,45 ------ 0 ----- BAC2--06 / 17 /2010
Джо -------- C1 ------- Inf --------- 7Per -------- 0,05 ------ 0----- PBC2--08 / 14/2012
Джо -------- C1 ------- Inf --------- 7Per --------0,05 ------ 0 ----- ZTM2--09 / 05/2011
Джо -------- C1 ------- Inf ---------7Per -------- 0,05 ------ 2 ----- QYC2--05 / 17/2010
Джо -------- C1 -------Inf --------- 7Per -------- 0,05 ------ 0 ----- FLC2--3 / 19/2010
Джо -------- С1 ------- Inf --------- -------- 7Per 0,05 ------ 1 ----- KSC2--09 / 05 /2011
Джо -------- C1 ------- Inf --------- 7Per -------- 0,05 ------ 0----- JYC2--08 / 14/2012

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

Имя --- Cat --- Desc --- Thresh --- Perc --- Err --- BP
Боб------- C1 ------- Inf -------- 7Per -------- 0,05 ----- 16 ----- BAC2, VBE2, AEC2
Боб ------- C2 ------ Com ------ 8Per -------- 0,45 ------ 4 ------ XBC4,ADC2
Джо -------- C1 ------- Inf -------- 7Per -------- 0,05 ------ 3 ------ QYC2, KSC2

Но для диапазона дат с 01.01.2009 по 31.09.2011

Я использовал функцию, созданную http://allenbrowne.com/func-concat.html Аллен Браун в сочетании со следующим 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 Ответ

1 голос
/ 17 февраля 2012

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

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

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. Пример запроса в вашем вопросе делает то, что вы хотите, за исключением ограничения результатов диапазоном [Date].
  2. Поле [Date]Тип данных Дата / Время.

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

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;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...