Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 来自非规范化表的信息_Sql_Ms Access - Fatal编程技术网

Sql 来自非规范化表的信息

Sql 来自非规范化表的信息,sql,ms-access,Sql,Ms Access,我有一个表,它是客户表和订单表的组合。它看起来像这样: _______________________________________________________ | Id | Cust Id | Other Id | Date | Has Prod 1 | Has Prod 2 | ------------------------------------------------------- | 1 | | 1 | 2009 | False |

我有一个表,它是客户表和订单表的组合。它看起来像这样:

_______________________________________________________
| 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列中查找客户Id。Cust Id和其他Id指向与本讨论无关的其他表

我想做两件事:

我希望生成一个报告或表格,总结客户并执行“Has”列的逻辑“or”,例如:

_________________________________________________
| Id | Cust Id  | Other Id | Has Prod 1 | Has Prod 2 |
-------------------------------------------------
| 1  | 1        |          | True       | True       |
| 2  | 2        |          | True       | False      |
-------------------------------------------------
_______________________________________________________
| Id | Cust Id  | Other Id | Date | Has Prod 1 | Has Prod 2 |
-------------------------------------------------------
| 5  | 2        |          | 2009 | False      | False      |
| 6  | 1        |          | 2010 | False      | True       |
-------------------------------------------------------
我希望获得每个客户Id组中的最新行,例如:

_________________________________________________
| Id | Cust Id  | Other Id | Has Prod 1 | Has Prod 2 |
-------------------------------------------------
| 1  | 1        |          | True       | True       |
| 2  | 2        |          | True       | False      |
-------------------------------------------------
_______________________________________________________
| Id | Cust Id  | Other Id | Date | Has Prod 1 | Has Prod 2 |
-------------------------------------------------------
| 5  | 2        |          | 2009 | False      | False      |
| 6  | 1        |          | 2010 | False      | True       |
-------------------------------------------------------
提前谢谢。 GRB

MIN()返回最小的值-1为True,0为False,因此如果分组行的一条记录为True,则返回-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([Date])确定,如示例数据所示,则上述查询将返回每个客户的最后一行

MIN()返回最小的值-1为True,0为False,因此如果分组行的一条记录为True,则返回-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([Date])确定,如示例数据所示,则上述查询将返回每个客户的最后一行

到目前为止你试过什么?举例来说,您是在使用SQL还是Access的查询?Access QBE使用SQL,所以@rajah9的问题毫无意义。@David-W-Fenton,有些Access用户从不编写SQL语句,只使用QBE GUI。(上图显示OP可能是QBE用户。)我试图确定OP是只熟悉QBE,还是能够理解SQL解决方案。我不会说Access QBE“使用SQL”,因为它是一个生成SQL的接口。所有Access用户都编写SQL——他们只是不必手工编写。如果您使用的是Access,那么您使用的是SQL,因此您的问题毫无意义。如果你想问他们是否在使用QBE,那么就直接问这个问题,而不是使用误导性的术语来暗示那些不真实的事情。到目前为止,你做了哪些尝试?举例来说,您是在使用SQL还是Access的查询?Access QBE使用SQL,所以@rajah9的问题毫无意义。@David-W-Fenton,有些Access用户从不编写SQL语句,只使用QBE GUI。(上图显示OP可能是QBE用户。)我试图确定OP是只熟悉QBE,还是能够理解SQL解决方案。我不会说Access QBE“使用SQL”,因为它是一个生成SQL的接口。所有Access用户都编写SQL——他们只是不必手工编写。如果您使用的是Access,那么您使用的是SQL,因此您的问题毫无意义。如果你想问他们是否在使用QBE,那么就直接问这个问题,而不是使用误导性的术语来暗示不真实的事情。库拉里斯,非常感谢你及时的回答。看起来这些能满足我的需要。GRB@GRB欢迎来到SO!看一看这张照片。你可以投有用的票,甚至可以接受。库拉里斯,非常感谢你及时的回答。看起来这些能满足我的需要。GRB@GRB欢迎来到SO!看一看这张照片。你可以投有用的票,甚至可以接受。