C # DataSet Designer - AccesDB - объединить две строки в одну

Если вы ищете что-то короткое и простое, возможно, этого вам будет достаточно:

class A(object):
    def __init__(self, l):
        self.data = l

    def __iter__(self):
        return iter(self.data)

пример использования:

In [3]: a = A([2,3,4])

In [4]: [i for i in a]
Out[4]: [2, 3, 4]
1
задан Parfait 31 March 2019 в 03:32
поделиться

1 ответ

Поскольку у вас есть только 2 человека на домохозяйство, вы можете использовать этот трюк для получения минимального и максимального идентификатора клиента на домохозяйство. Это делается в подзапросе.

SELECT
    X.HHID,
    C1.FIRST_NAME AS I_FIRST_NAME, C1.LAST_NAME AS I_LAST_NAME,
    C2.FIRST_NAME AS II_FIRST_NAME, C2.LAST_NAME AS II_LAST_NAME
FROM
    ((  SELECT
            HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID))  AS MaxCId
        FROM HouseHold_Client
        GROUP BY HHID
    ) X
    INNER JOIN Client AS C1
        ON X.MinCId = C1.CID)
    LEFT JOIN Client AS C2
        ON X.MaxCId = C2.CID;

Цель выражения IIf() - вывести максимальный идентификатор клиента только в том случае, если он отличается от минимального идентификатора клиента. Чтобы также вернуть запись, когда MaxCId равно Null, требуется LEFT JOIN на C2.

Я не присоединился к таблице HouseHold здесь, так как нам нужна только HHID из нее, которая также доступна в HouseHold_Client. Вы также можете присоединиться к нему, если вам нужны другие столбцы из него.


Подзапрос:

(  SELECT
        HHID, Min(CID) AS MinCId, IIf(Max(CID)=Min(CID), Null, Max(CID))  AS MaxCId
    FROM HouseHold_Client
    GROUP BY HHID
) X

Подзапросы должны быть заключены в круглые скобки и им должно быть присвоено имя (здесь X). X действует как обычная таблица, имеющая столбцы HHID, MinCId и MaxCId в основном запросе. Он сгруппирован по HHID. Т.е. он возвращает одну строку за HHID. Min(CID) возвращает наименьшее CID и Max(CID) наибольшее CID за HHID.

В случае, когда у вас есть 2 клиента на HHID, это означает, что Min и Max дадут этих 2 клиентов. Если у вас есть только 1 клиент, то и Min, и Max вернут одного и того же клиента. Если это так, то IIf вернет Null вместо Max(CID), чтобы избежать двойного возврата одного и того же клиента.

0
ответ дан Olivier Jacot-Descombes 31 March 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: