【问题标题】:Select 1 field from a group从组中选择 1 个字段
【发布时间】:2018-12-13 21:16:32
【问题描述】:

我在尝试让 1 个字段返回一组字段中的 1 个时遇到问题 例子: 这就是我能得到的(在 [Job Name] 和 [Door Style] 列之间使用 Inner Join,这两组数据本来就存在于不同的表中)

-[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

我已经尝试了多种不同的方法来实现这一点,我当前的方法正在尝试在下面复制它,因为交叉应用似乎不适用于我正在使用的东西。 (某种形式的 Access 中的 SQL?软件是 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 之间的 Inner Join,并生成这样的数据

[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]

【问题讨论】:

  • 您的子查询选择jobs1.jobs.fieldname,而它应该选择jobs1.fieldname ...话虽如此,您的子查询不会自己产生您需要的全部结果吗?
  • 如果这是 SQL Server,请将 SQL Server 标签放在您的问题上。 SQL 只是许多 dbms 供应商使用的一种语言。
  • @Eric -- 我相信这是用于 ms 访问(尽管被错误标记)...
  • 在我看来您想要 Min() 门样式,除非数据不是字面上的 Door Style1。如果这不是您的数据,请编辑问题以显示代表性数据。同意@sgeddes。
  • @SGeddes,您的更改确实使这项工作奏效了,太好了,谢谢。这可能是也可能不是某种形式的 SQL Server,我不知道。这是在软件 Cabinet Vision 中完成的,该软件确实为其数据库使用了一些 Access 文件。目前,该更改确实使它起作用,我没有处理大量信息,因此代码的效率对我来说不是问题,当我有空闲时间时,我会尝试更简洁的方法。谢谢大家

标签: sql ms-access aggregate-functions


【解决方案1】:

您可以使用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]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多