微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在T-SQL中对分组使用逻辑功能

如何解决在T-SQL中对分组使用逻辑功能

是否可以使用t-sql中的组来评估OR或AND逻辑函数

DECLARE @TimeClock TABLE 
                   (
                       EName  NVARCHAR(14),Time   NVARCHAR(5),OnTime tinyint
                   )
    
INSERT INTO @TimeClock VALUES ('Adam','07:55',1)
INSERT INTO @TimeClock VALUES ('Adam','08:03',0)
INSERT INTO @TimeClock VALUES ('Bob','07:57',1)
INSERT INTO @TimeClock VALUES ('Bob','07:59',1)
INSERT INTO @TimeClock VALUES ('Carl','08:01',0)
INSERT INTO @TimeClock VALUES ('Carl','08:02',0)

SELECT    
    EName,OR(OnTime) AS SometimesLate,AND(OnTime) AS AlwaysLate,NOT(OR(OnTime)) AS NeverLate
FROM 
    @TimeClock
GROUP BY 
    EName

一个非常简单的情况下,我可以这样做:

SELECT    
    tc.EName,IIF(n.EName IS NOT NULL,1,0) AS SometimesLate,IIF(o.EName IS NULL,0) AS AlwaysLate,IIF(n.EName IS NULL,0) AS NeverLate
FROM 
    (SELECT disTINCT EName FROM @TimeClock) tc
LEFT JOIN 
    (SELECT disTINCT EName FROM @TimeClock WHERE OnTime = 1) o ON o.EName = tc.EName
LEFT JOIN 
    (SELECT disTINCT EName FROM @TimeClock WHERE OnTime = 0) n ON n.EName = tc.EName

但是如果我有很多不同的列(例如,OnTime,延迟5分钟,延迟10分钟等),则会变得非常费力。

enter image description here

解决方法

某些数据库具有布尔聚合功能(例如Postgres),但SQL Server并非其中之一。

但是,这里不需要那种复杂的逻辑。我们可以使用ScriptApp.getService().getUrl()MIN()和基本算术来模拟布尔聚合,如下所示:

MAX()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。