Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带位字段的SQL聚合查询_Sql Server_Aggregate Functions - Fatal编程技术网

Sql server 带位字段的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

我有一个如下所示的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
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,那么我们有一个未锁定的记录,因此我们没有“锁定”该日期的所有记录。