Sql 基于字段值排除项目

Sql 基于字段值排除项目,sql,sql-server,sql-view,sql-server-2019,Sql,Sql Server,Sql View,Sql Server 2019,我使用下面的脚本创建了一个视图,但其中一个字段正在提取我不需要的信息。在“IsServer”列中,属于服务器的项目标记为1,而不是服务器的项目标记为0。是否有方法创建视图并排除在IsServer列中标记为1的服务器项?我不确定如何将其构建到创建视图脚本中 CREATE VIEW [dbo].[vw_Cherwell_Machines] AS SELECT dbo.rptComputers.HostName, dbo.rptComputers.Vendor, db

我使用下面的脚本创建了一个视图,但其中一个字段正在提取我不需要的信息。在“IsServer”列中,属于服务器的项目标记为1,而不是服务器的项目标记为0。是否有方法创建视图并排除在IsServer列中标记为1的服务器项?我不确定如何将其构建到创建视图脚本中

CREATE VIEW [dbo].[vw_Cherwell_Machines] AS 
SELECT dbo.rptComputers.HostName, 
       dbo.rptComputers.Vendor, 
       dbo.tblComputer.IsVirtual, 
       dbo.rptComputers.ProcessorCount, 
       dbo.tblComputer.IsServer, 
       dbo.rptComputers.BiosSerialNumber, 
       dbo.rptComputers.PhysicalMemory, 
       dbo.rptComputers.ProcessorType, 
       dbo.rptComputers.ProcessorSpeed, 
       dbo.rptComputers.MostFrequentUser, 
       dbo.tblComputer.Domain, 
       dbo.rptComputers.ClientVersion, 
       dbo.rptComputers.ClientInstallDate, 
       dbo.rptComputers.ClientConfigurationName, 
       dbo.rptComputers.BiosVersion, 
       dbo.rptComputers.BiosDate, 
       dbo.rptComputers.Manufacturer, 
       dbo.rptComputers.Model, 
       dbo.rptComputers.IsPortable, 
       dbo.rptComputers.OperatingSystem, 
       dbo.tblComputer.OSServicePack,
       dbo.rptComputers.ComputerStatusCode, 
       dbo.rptComputers.IPAddress AS 'MultipleIPAddress', 
                
CASE WHEN PATINDEX ('%[, ]%',dbo.rptComputers.IPAddress) > 0 THEN 
       left(dbo.rptComputers.IPAddress,(PATINDEX('%[, ]%',dbo.rptComputers.IPAddress))-1) 
       ELSE dbo.rptComputers.IPAddress 
       END  AS 'IPAddress',
                
       dbo.rptComputers.LastScanDate

FROM dbo.rptComputers INNER JOIN dbo.tblComputer ON dbo.rptComputers.CID = dbo.tblComputer.CID 
     AND dbo.rptComputers.ComputerID = dbo.tblComputer.ComputerID

GROUP BY dbo.rptComputers.HostName, 
         dbo.tblComputer.IsVirtual, 
         dbo.rptComputers.Vendor, 
         dbo.rptComputers.ProcessorCount, 
         dbo.rptComputers.BiosSerialNumber, 
         dbo.tblComputer.IsServer, 
         dbo.rptComputers.PhysicalMemory,
         dbo.rptComputers.ProcessorType, 
         dbo.rptComputers.ProcessorSpeed, 
         dbo.rptComputers.MostFrequentUser, 
         dbo.tblComputer.Domain,
         dbo.rptComputers.ClientVersion, 
         dbo.rptComputers.ClientInstallDate, 
         dbo.rptComputers.ClientConfigurationName, 
         dbo.rptComputers.BiosVersion, 
         dbo.rptComputers.BiosDate, 
         dbo.rptComputers.Manufacturer, 
         dbo.rptComputers.Model, 
         dbo.rptComputers.IsPortable, 
         dbo.rptComputers.OperatingSystem, 
         dbo.tblComputer.OSServicePack,
         dbo.rptComputers.ComputerStatusCode, 
         dbo.rptComputers.IPAddress, 
         dbo.rptComputers.LastScanDate

你需要一个过滤视图;i、 例如,带有
WHERE
子句的视图。类似这样的内容(我在注释中标记了添加到代码的开始/结束):

文档:请务必查看此处的“限制”部分,以防您的环境中存在无法在此处工作的内容


仅供参考,应避免使用。坚持使用列别名,并使用这些别名来限定列。它使您的代码更加简洁,因此可读性更好。另外,当您的查询中没有聚合时,为什么在这里执行
分组依据
?我仍然建议修复3+部分命名并删除
分组依据
,因为没有聚合。@Larnu我同意您的两个顾虑。虽然这些都是正确的,但它们超出了问题的范围。OP想要得到一个过滤后的结果集作为视图创建脚本——我回答了这个问题。你的评论将被OP阅读,并希望得到实施。“虽然这些都是正确的,但它们超出了问题的范围。”我认为这是“好”或“好”答案“很棒”的原因。
CREATE VIEW [dbo].[vw_Cherwell_Machines] AS 
SELECT dbo.rptComputers.HostName, 
       dbo.rptComputers.Vendor, 
       dbo.tblComputer.IsVirtual, 
       dbo.rptComputers.ProcessorCount, 
       dbo.tblComputer.IsServer, 
       dbo.rptComputers.BiosSerialNumber, 
       dbo.rptComputers.PhysicalMemory, 
       dbo.rptComputers.ProcessorType, 
       dbo.rptComputers.ProcessorSpeed, 
       dbo.rptComputers.MostFrequentUser, 
       dbo.tblComputer.Domain, 
       dbo.rptComputers.ClientVersion, 
       dbo.rptComputers.ClientInstallDate, 
       dbo.rptComputers.ClientConfigurationName, 
       dbo.rptComputers.BiosVersion, 
       dbo.rptComputers.BiosDate, 
       dbo.rptComputers.Manufacturer, 
       dbo.rptComputers.Model, 
       dbo.rptComputers.IsPortable, 
       dbo.rptComputers.OperatingSystem, 
       dbo.tblComputer.OSServicePack,
       dbo.rptComputers.ComputerStatusCode, 
       dbo.rptComputers.IPAddress AS 'MultipleIPAddress', 
                
CASE WHEN PATINDEX ('%[, ]%',dbo.rptComputers.IPAddress) > 0 THEN 
       left(dbo.rptComputers.IPAddress,(PATINDEX('%[, ]%',dbo.rptComputers.IPAddress))-1) 
       ELSE dbo.rptComputers.IPAddress 
       END  AS 'IPAddress',
                
       dbo.rptComputers.LastScanDate

FROM dbo.rptComputers INNER JOIN dbo.tblComputer ON dbo.rptComputers.CID = dbo.tblComputer.CID 
     AND dbo.rptComputers.ComputerID = dbo.tblComputer.ComputerID
/*begin change*/
WHERE tblComputer.IsServer = 0 
/*end change*/
GROUP BY dbo.rptComputers.HostName, 
         dbo.tblComputer.IsVirtual, 
         dbo.rptComputers.Vendor, 
         dbo.rptComputers.ProcessorCount, 
         dbo.rptComputers.BiosSerialNumber, 
         dbo.tblComputer.IsServer, 
         dbo.rptComputers.PhysicalMemory,
         dbo.rptComputers.ProcessorType, 
         dbo.rptComputers.ProcessorSpeed, 
         dbo.rptComputers.MostFrequentUser, 
         dbo.tblComputer.Domain,
         dbo.rptComputers.ClientVersion, 
         dbo.rptComputers.ClientInstallDate, 
         dbo.rptComputers.ClientConfigurationName, 
         dbo.rptComputers.BiosVersion, 
         dbo.rptComputers.BiosDate, 
         dbo.rptComputers.Manufacturer, 
         dbo.rptComputers.Model, 
         dbo.rptComputers.IsPortable, 
         dbo.rptComputers.OperatingSystem, 
         dbo.tblComputer.OSServicePack,
         dbo.rptComputers.ComputerStatusCode, 
         dbo.rptComputers.IPAddress, 
         dbo.rptComputers.LastScanDate