【问题标题】:Select distinct values where condition having sum < value选择具有 sum < value 的条件的不同值
【发布时间】:2016-05-23 09:07:16
【问题描述】:

我的 SQL 查询有问题。我需要使用 where 子句获取所有唯一 [Cod Angajat] 字段的列表,其中 [Timp declarat] 列中所有条目的总和小于 8。贝娄是我到目前为止所得到的。

在表格中我有 3 行。它返回相同的行,而不是 1 行,所有条件都适用 - 意思是 [Cod Angajat] = 2 的行。

|   Cod Angajat  |   Nume   |  Timp declarat  |
---------------------
|  1             |  Ene     | 3               |
|  1             |  Ene     | 5               |
|  2             |  Gigi    | 4               |
select COUNT(DISTINCT [Cod Angajat]), [Cod Angajat], [Nume], [Timp declarat]
FROM [SC Vermorel SRL$ProductieVE]
WHERE (sum([Timp declarat] < 8 AND cast(CONVERT(varchar(8), Data, 112) As DateTime) = @data2) and ([Schimb] = '" & ProceseazaSCH(Now()) & "' 
GROUP BY [Nume], [Cod Angajat], [Timp declarat]
HAVING sum([Timp declarat]) < 8

【问题讨论】:

  • 显示表格数据、当前结果和预期结果。
  • 您按 [Timp declarat] 进行分组,然后 sum 聚合适用于所有字段值都相等的行。您只能按 [Cod Angajat] 和 [Nume] 分组。

标签: sql sum distinct having


【解决方案1】:

如果每个[Cod Angajat] 需要一行,那么应该在GROUP BY 中——仅此而已:

SELECT [Cod Angajat], SUM([Timp declarat]
FROM [SC Vermorel SRL$ProductieVE]
WHERE CONVERT(date, Data) = @data2 AND
      ([Schimb] = '" & ProceseazaSCH(Now()) & "'
GROUP BY [Cod Angajat]
HAVING SUM([Timp declarat]) < 8;

查询的其余部分也得到了简化。无需将日期/时间转换为字符串即可删除时间组件。并且聚合函数不属于WHERE 子句。

【讨论】:

    【解决方案2】:

    您通过 Timp declarat 对查询进行分组,这就是为什么您的返回集中有 Cod Angajat 的重复项。由于查询中的其他任何地方都在使用 Timp Declarat 的总和,我假设以下是您需要的:

    select COUNT(DISTINCT [Cod Angajat]), [Cod Angajat], [Nume], SUM([Timp declarat]) as SumTimpDeclarat
    FROM [SC Vermorel SRL$ProductieVE]
    WHERE (sum([Timp declarat] < 8 AND cast(CONVERT(varchar(8), Data, 112) As DateTime) = @data2) and ([Schimb] = '" & ProceseazaSCH(Now()) & "' 
    GROUP BY [Nume], [Cod Angajat]
    HAVING sum([Timp declarat]) < 8
    

    【讨论】:

    • code SELECT [Cod Angajat],sum([Timp declarat]) as TotalOre FROM [SC Vermorel SRL$ProductieVE] WHERE cast(CONVERT(varchar(8), Data, 112) As DateTime ) = '2016-05-23' And [Schimb] = 'SCH I' GROUP BY [Cod Angajat] HAVING sum([Timp declarat])code 工作查询。非常感谢您的宝贵意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2011-03-31
    • 2015-02-28
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多