Select 条件总和 < 值的不同值
Select distinct values where condition having sum < value
我的 SQL 查询有问题。我需要使用 where 子句获取所有唯一 [Cod Angajat] 字段的列表,其中 [Timp declarat] 列中所有条目的总和小于 8。贝娄是我到目前为止得到的。
在 table 我有 3 行。它 returns 我是相同的行,而不是 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 分组,这就是为什么您的 return 集中有重复的 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
如果每个 [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;
查询的其余部分也得到了简化。无需将 date/time 转换为字符串即可删除时间部分。聚合函数不属于 WHERE
子句。
我的 SQL 查询有问题。我需要使用 where 子句获取所有唯一 [Cod Angajat] 字段的列表,其中 [Timp declarat] 列中所有条目的总和小于 8。贝娄是我到目前为止得到的。
在 table 我有 3 行。它 returns 我是相同的行,而不是 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 分组,这就是为什么您的 return 集中有重复的 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
如果每个 [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;
查询的其余部分也得到了简化。无需将 date/time 转换为字符串即可删除时间部分。聚合函数不属于 WHERE
子句。