【问题标题】:SQL MIN() returns multiple values?SQL MIN() 返回多个值?
【发布时间】:2012-10-29 15:06:53
【问题描述】:

我正在使用 SQL Server 2005,使用 Web Developer 2010 进行查询,并且 min 函数似乎返回了多个值(对于返回的每个 ID,请参见下文)。理想情况下,我希望它只为每个 ID 返回一个。

SELECT     Production.WorksOrderOperations.WorksOrderNumber,
           MIN(Production.WorksOrderOperations.OperationNumber) AS Expr1, 
           Production.Resources.ResourceCode,
           Production.Resources.ResourceDescription,
           Production.WorksOrderExcel_ExcelExport_View.PartNumber,
           Production.WorksOrderOperations.PlannedQuantity,
           Production.WorksOrderOperations.PlannedSetTime, 
           Production.WorksOrderOperations.PlannedRunTime
FROM       Production.WorksOrderOperations
INNER JOIN Production.Resources
           ON Production.WorksOrderOperations.ResourceID = Production.Resources.ResourceID
INNER JOIN Production.WorksOrderExcel_ExcelExport_View
           ON Production.WorksOrderOperations.WorksOrderNumber = Production.WorksOrderExcel_ExcelExport_View.WorksOrderNumber
WHERE      Production.WorksOrderOperations.WorksOrderNumber IN
             ( SELECT   WorksOrderNumber
               FROM     Production.WorksOrderExcel_ExcelExport_View AS WorksOrderExcel_ExcelExport_View_1
               WHERE    (WorksOrderSuffixStatus = 'Proposed'))
           AND Production.Resources.ResourceCode IN ('1303', '1604')
GROUP BY   Production.WorksOrderOperations.WorksOrderNumber,
           Production.Resources.ResourceCode,
           Production.Resources.ResourceDescription,
           Production.WorksOrderExcel_ExcelExport_View.PartNumber,
           Production.WorksOrderOperations.PlannedQuantity,
           Production.WorksOrderOperations.PlannedSetTime,
           Production.WorksOrderOperations.PlannedRunTime

如果您能理解它,我将从多个表中选择某些列,其中 WorksOrderNumber 也包含在子查询中,以及许多其他条件。

结果集看起来有点像,已经模糊了不相关的数据。

http://i.stack.imgur.com/5UFIp.png(不允许我嵌入图片)。

突出显示的行不应该存在,我无法明确将它们过滤掉,因为此结果集将每天更新,并且很可能发生在不同的记录中。

我尝试将 OperationNumber 转换为许多其他数据类型,varchar 类型返回“100”而不是“30”。也试过搜索引擎,好像没有人遇到同样的问题。

我没有对表格进行结构化(它们被严重标准化),并且无法重新构建它们。

任何想法表示赞赏,非常感谢。

【问题讨论】:

  • 有没有办法在 IN() 函数之前的 WHERE 子句中有多个列?像这样:WHERE (WorksOrderNumber, OperationNumber) IN (SELECT WorksOrderNumber, OperationNumber FROM table)
  • 请注意标签是独立的。也就是说,结合sql 和server 并不意味着您在谈论MS SQL Server。请务必小心选择标签。

标签: sql sql-server min


【解决方案1】:

MIN 函数返回组内的最小值。 如果您想要每个 ID 的最小值,您需要仅在 ID 上获取组。 我假设您所说的“ID”指的是 Production.WorksOrderOperations.WorksOrderNumber。

您可以将其添加为 SQL 中的“表”:

(SELECT Production.WorksOrderOperations.WorksOrderNumber,
       MIN(Production.WorksOrderOperations.OperationNumber) 
  FROM Production.WorksOrderOperations
 GROUP BY  Production.WorksOrderOperations.WorksOrderNumber)

【讨论】:

  • 会声明为临时表是的,谢谢,有没有办法在SQL中做以下事情? WHERE Field1+Field2 IN (SELECT Field1, Field2 FROM) 等等...
  • 有点麻烦,但我最终声明了两个单独的表,然后使用 select 子句查询第二个表是否包含第一个表中的值,达到预期的结果集,它将如何证明未来是另一回事。不过,谢谢你指引我正确的方向。
  • 回复第一条评论:如果您还有其他问题,您应该将其作为新问题发布(前提是您无法通过搜索网络找到答案)。
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2023-04-09
  • 2013-12-31
  • 2018-11-05
  • 1970-01-01
  • 2014-06-20
  • 2010-09-21
相关资源
最近更新 更多