Информация из ненормированной таблицы - PullRequest
1 голос
/ 01 августа 2011

У меня есть таблица, которая представляет собой комбинацию таблицы клиентов и таблицы заказов. Это выглядит примерно так:

_______________________________________________________
| Id | Cust Id  | Other Id | Date | Has Prod 1 | Has Prod 2 |
-------------------------------------------------------
| 1  |          | 1        | 2009 | False      | True       |
| 2  | 1        |          | 2008 | False      | True       |
| 3  | 2        |          | 2008 | True       | False      |
| 4  | 1        |          | 2009 | True       | True       |
| 5  | 2        |          | 2009 | False      | False      |
| 6  | 1        |          | 2010 | False      | True       |
-------------------------------------------------------

Единственный способ узнать, есть ли у меня клиент, - это найти идентификатор клиента в столбце Cust Id. Идентификатор Cust и Other Id указывают на другие таблицы, которые не имеют отношения к этому обсуждению.

Я бы хотел сделать 2 вещи:

Я хотел бы создать отчет или таблицу, в которой обобщаются данные о клиентах и ​​выполняется логическое «или» из столбцов «Имеет», например:

_________________________________________________
| Id | Cust Id  | Other Id | Has Prod 1 | Has Prod 2 |
-------------------------------------------------
| 1  | 1        |          | True       | True       |
| 2  | 2        |          | True       | False      |
-------------------------------------------------

Я хотел бы получить самую последнюю строку в каждой группе Cust Id, например:

_______________________________________________________
| Id | Cust Id  | Other Id | Date | Has Prod 1 | Has Prod 2 |
-------------------------------------------------------
| 5  | 2        |          | 2009 | False      | False      |
| 6  | 1        |          | 2010 | False      | True       |
-------------------------------------------------------

Спасибо заранее. GRB

1 Ответ

1 голос
/ 01 августа 2011
SELECT [Cust ID], MIN([Has Prod 1]) AS MinOne, MIN([Has Prod 2]) AS MinTwo
FROM customerorder
GROUP BY [Cust ID]

MIN () возвращает наименьшее значение. -1 - Истина, а 0 - Ложь, поэтому, если одна запись сгруппированных строк - Истина, возвращается -1.

SELECT t1.*
FROM customerorder AS t1
INNER JOIN (SELECT [Cust ID], Max([Date]) As MaxDate
            FROM customerorder 
            GROUP BY [Cust ID]) AS t2
ON ([t1].[Cust ID] = [t2].[Cust ID] AND [t1].[Date] = [t2].[MaxDate])

Если последняя строка определяется по Max ([Дата]), как указано в ваших данных образца, вышеприведенный запрос будет возвращать последнюю строку для каждого клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...