Sql server 带位字段的SQL聚合查询
我有一个如下所示的SQL表:Sql server 带位字段的SQL聚合查询,sql-server,aggregate-functions,Sql Server,Aggregate Functions,我有一个如下所示的SQL表: ID uniqueidentifier ID_Task uniqueidentifier ID_Employee uniqueidentifier Comment nvarchar(256) Complete int Date datetime Days decimal(6, 2) Locked bit Created datetime Edited datetime D
ID uniqueidentifier
ID_Task uniqueidentifier
ID_Employee uniqueidentifier
Comment nvarchar(256)
Complete int
Date datetime
Days decimal(6, 2)
Locked bit
Created datetime
Edited datetime
Deleted bit
SELECT CAST([Note].Date AS DATE) As Date,
SUM([Note].Days) AS Total
FROM
Note
WHERE
[Note].ID_Employee = N'E6A0E609-F8B2-4B48-A17C-4A4E117A4077'
GROUP BY
CAST(Note.Date AS DATE)
我想做的是将给定ID_员工的每个日期的所有“天数”相加。我设法找到了一个如下所示的查询:
ID uniqueidentifier
ID_Task uniqueidentifier
ID_Employee uniqueidentifier
Comment nvarchar(256)
Complete int
Date datetime
Days decimal(6, 2)
Locked bit
Created datetime
Edited datetime
Deleted bit
SELECT CAST([Note].Date AS DATE) As Date,
SUM([Note].Days) AS Total
FROM
Note
WHERE
[Note].ID_Employee = N'E6A0E609-F8B2-4B48-A17C-4A4E117A4077'
GROUP BY
CAST(Note.Date AS DATE)
这为我提供了每个唯一“日期”的总“天数”的结果集,例如:
2013-06-20 1.00
2013-06-21 0.75
,显示员工E6A0E609-F8B2-4B48-A17C-4A4E117A4077在20日工作1个工作日,在21日工作3/4个工作日。一年中的任何一天都可以有任意数量的个人记录,因为给定的员工可能在不同的ID_任务上工作了不同的时间
现在我要做的是向结果集中添加另一个字段,如果其中任何一个记录的“锁定”设置为1,则为“false”,如果它们都为0,则为“true”。用简单的语言来说,我想问数据库的问题是,“对于表中的所有日期,告诉我给定员工的总工作天数以及当天的所有记录是否都已锁定”。因此,我希望结果集显示的是:
2013-06-20 1.00 TRUE
2013-06-21 0.75 FALSE
这意味着该员工已在第20个工作日签字(正确,所有记录在锁定位字段中都有1个记录),而在第21个工作日,一个或多个记录尚未签字,这意味着该员工在第21个工作日的一个或多个记录在锁定位字段中有0个记录)
这有意义吗?不管怎样,我想不出最好的方法
有谁能帮助潜行的SQL天才吗
编辑:
好的,感谢我从下面的答案中得到的想法,我在查询中添加了案例行。基本上,它说,“如果在这个日期任何记录中锁定的最低数量是零,那么不是所有的记录都被注销了,否则它们都被注销了”
当0时newColumn=CASE MAX(Locked)然后'true'否则'false'结束newColumn=CASE MAX(CONVERT(INT,Locked))当0时newColumn=CASE MAX(CONVERT(INT,Locked))然后'true'否则'false'结束我想只有当所有“Locked”值都为1时他才想要true。。。这与任何“锁定”值为0时说FALSE相同。因此,基于Aaron&Gareth的建议:newColumn=CASE MIN(CONVERT(INT,Locked))当0时,则为“FALSE”,否则为“TRUE”,Endo忘了说,生产服务器将是2008年。我不确定IFF是否是t-sql的一部分?IIF是在sql 2012中添加的。你可以按照上面的建议用CASE替换它。好的,我会把这个标记为答案,因为它非常正确,除了你需要从MAX切换到MIN,就像我上面的编辑一样。i、 如果MIN=0,那么我们有一个未锁定的记录,因此我们没有“锁定”该日期的所有记录。