Несколько строк, некоторые имеют идентичные идентификаторы, чтобы разделить столбцы - PullRequest
0 голосов
/ 28 июня 2018

Работа в Access 2013. У меня файл Excel выложен так:

ID  | Name  | Major   | Email
----+-------+---------+-----------------------
005 | Bobby | English | coolEmail@email.com
006 | Sarah | Math    | email@email.com
006 | Sarah | Science | email@email.com
007 | James | Art     | badEmail@email.com

и я бы хотел, чтобы все закончилось вот так

ID  | Name  | Major 1 | Major 2 | Email
----+-------+---------+---------+----------------------
005 | Bobby | English | (blank) | coolEmail@email.com
006 | Sarah | Math    | Science | email@email.com
007 | James | Art     | (blank) | badEmail@email.com

Кто-нибудь знает, как я это сделаю?

Ни один из моих поисков здесь не дал мне ничего, что работает. Я пытался это безрезультатно. Понятия не имею, что я делаю: (

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Только что проверил этот запрос, и похоже, что он делает то, что вы ищете. Замените TABLENAME на имя таблицы, на которую вы будете ссылаться в MS Access.

SELECT
    m1.ID
    ,m1.Name
    ,m1.major AS [Major 1]
    ,m2.major AS [Major 2]
    ,m1.Email

FROM
    TABLENAME AS m1
LEFT JOIN
    (
        SELECT
            *
        FROM
            (
                SELECT 
                    *
                    ,(
                        SELECT COUNT(*) 
                        FROM TABLENAME AS x 
                        WHERE x.major > y.major AND x.id = y.id
                    ) + 1 as rank_nbr 
                FROM 
                    TABLENAME AS y
            )
        WHERE
            rank_nbr = 2
    ) AS m2 ON m2.id = m1.id

WHERE
    m2.major IS NULL OR (m1.major IS NOT NULL AND m2.major <> m1.major)
0 голосов
/ 28 июня 2018

Предполагая, что вы связали данные Excel в виде связанной таблицы, попробуйте следующее:

Select
    ID,
    [Name],
    Min([Major]) As [Major 1],
    Max([Major]) As [Major 2],
    Email
From
    YourLinkedTable
Group By
    ID,
    [Name],
    Email

Для отображения заготовок разверните так:

Select
    ID,
    [Name],
    Min([Major]) As [Major 1],
    IIf(Max([Major]) = Min([Major]), Null, Max([Major])) As [Major 2],
    Email
From
    YourLinkedTable
Group By
    ID,
    [Name],
    Email
0 голосов
/ 28 июня 2018

Там могут быть некоторые незначительные проблемы с синтаксисом Access, но я думаю, что это должно работать. В основном вам понадобится «промежуточная» исходная таблица или возможность напрямую запрашивать Excel.

insert into <destination> (ID, Name "Major 1", "Major 2", Email)
select
    ID, min(Name), min(Major), iif(max(Major) <> min(Major), max(Major), null), min(Email)
from <source>
group by ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...