从组中选择1个字段

时间:2018-12-12 23:57:29

标签: sql ms-access aggregate-functions

我在尝试获取1个字段以返回一组字段中的1个时遇到问题 例: 这就是我所能得到的(使用[Job Name]和[Door Style]列之间的内部联接,两组数据固有地存在于不同的表中)

-[Job Name],  [Door Style]
-Job1           Door Style1
-Job1           Door Style2 
-Job2           Door Style3
-Job2           Door Style4

我想要的是

[Job Name],  [Door Style]
Job1           Door Style1 
Job2           Door Style3

我尝试了多种不同的方法来实现此目的,我当前的方法试图在下面复制此方法,因为交叉应用似乎不适用于我正在使用的方法。 (SQl以某种形式的Access?软件是Cabinet Vision)

https://social.msdn.microsoft.com/Forums/office/en-US/fcea9655-2db8-4d83-804d-e85250093b18/how-to-have-a-select-query-like-sql-server-cross-apply-query-in-msaccess?forum=accessdev

如果我没记错的话(此刻还不是软件在电脑前,它会向我抛出类似“您试图执行不包含指定聚合函数的查询”之类的错误消息

表JobS包括Job和Doors之间的内部联接,并产生这样的数据

[Job Name],  [Door Style]
Job1           Door Style1
Job1           Door Style2 
Job2           Door Style3
Job2           Door Style4

任何关于替代方法的输入或我在下面可能会缺少的内容将不胜感激。 谢谢!

SELECT JobS.[Job Name], JobS.[Door Name]

from JobS as JobS

inner join (

               select JobS1.JobS.[Job Name], max(JobS1.JobS.[Door Name]) as OneDoor

               from JobS as JobS1

               group by JobS1.[Job Name]) as Q1

on Q1.[Job Name] = JobS.[Job Name] and Q1.OneDoor = JobS.[Door Name]

1 个答案:

答案 0 :(得分:0)

您可以使用First聚合来选择第一个值:

SELECT JobS.[Job Name], First(JobS.[Door Name])

FROM JobS as JobS

GROUP BY  JobS.[Job Name]

但是,如果您根本不使用子查询,您的尝试也应该会起作用:

SELECT JobS.[Job Name], Max(JobS.[Door Name])

FROM JobS as JobS

GROUP BY  JobS.[Job Name]

但是,这将根据字符串顺序返回最大值。