根据字段值排除项目

问题描述

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

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.rptComputers.IPAddress,dbo.rptComputers.LastScanDate

解决方法

您需要一个过滤视图;即,带有 WHERE 子句的视图。像这样(我在评论中标记了我添加到您的代码的开始/结束):

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.rptComputers.IPAddress,dbo.rptComputers.LastScanDate

文档:https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-filtered-indexes?view=sql-server-ver15 请务必查看此处的“限制”部分,以防您的环境中存在无法在此处运行的内容。