选择具有总和<的条件的不同值。值

时间:2016-05-23 09:07:17

标签: sql sum distinct having

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

在表格中我有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

2 个答案:

答案 0 :(得分:0)

使用Timp声明对您进行分组查询,这就是您在返回集中有Cod Angajat重复的原因。由于查询中的其他地方都使用了Timp声明的总和,我假设您需要以下内容:

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

答案 1 :(得分:0)

如果您需要每[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子句。