Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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中显示条件Where条件_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

在SQL SERVER中显示条件Where条件

在SQL SERVER中显示条件Where条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在努力实现这样的目标 SELECT Name, Age From Employee WHERE ID=1 AND CASE(WHEN backguid='00000000-0000-0000-0000-000000000000' THEN (State=@state and City = @city) ELSE (buildingID=backguid) END 我只想在backguid为空时(即00000000-0000-0000-0000-000000000000)在wher

我正在努力实现这样的目标

SELECT Name, Age From Employee 
WHERE ID=1 
AND CASE(WHEN backguid='00000000-0000-0000-0000-000000000000' 
THEN (State=@state and City = @city) 
ELSE (buildingID=backguid) 
END
我只想在backguid为空时(即00000000-0000-0000-0000-000000000000)在where子句中显示state和city列。否则我只想显示一列,即buildingID=backguid

我在这里使用的总体代码是:

DECLARE 
@firstName varchar(50),
@buildingID XML='<items><item ID="76BA34CE-273A-46AC-B4EF-C99A3E93DD21" /></items>',
@fetchedBuildValue uniqueidentifier,
@State VARCHAR(50) ='WA',
@city VARCHAR(50) ='Spokane'

set @fetchedBuildValue = (SELECT data.item.value('./@ID', 'uniqueidentifier') AS PId
FROM @buildingID.nodes('/items/item') data(item));
SELECT
PortalUser.[ID]
,PortalUser.[Status]
,PortalUser.[Type]
,PortalUser.[Prefix]
,PortalUser.[Suffix]
,PortalUser.[FirstName]
,PortalUser.[MiddleName]
,PortalUser.[LastName]
,PortalUser.[Title]
,PortalUser.[Department]
,PortalUser.[URL]
,PortalUser.[TenantID]
,PortalUser.[DefaultPropertyID]
,PortalUser.[DoNotEmail]
,PortalUser.[Profile]
,PortalUser.[PrimaryPhoneNumberType]
,PortalUser.[PrimaryPhoneNumber]
,PortalUser.[BusinessPhoneNumber]
,PortalUser.[HomePhoneNumber]
,PortalUser.[MobilePhoneNumber]
,PortalUser.[FaxPhoneNumber]
,Building.BuildingName
FROM 
PortalUser
INNER JOIN Relationship AS T_U ON T_U.Target = PortalUser.ID AND T_U.TargetType = 0 AND T_U.SourceType = 6
INNER JOIN Tenant ON T_U.Source = Tenant.ID
WHERE
(@firstname IS NULL OR PortalUser.FirstName LIKE '%' + @firstname + '%')
AND CASE(WHEN @fetchedBuildValue ='00000000-0000-0000-0000-000000000000' 
THEN (State=@state AND City = @city) 
ELSE (buildingID=backguid) 
END
然而,我无法通过案例来实现它。我不知道我错过了什么。

这可能会有所帮助

SELECT Name, Age From Employee 
WHERE ID=1 AND (
   (backguid='00000000-0000-0000-0000-000000000000'  and State=@state and City = @city)
OR ( backguid !='00000000-0000-0000-0000-000000000000' and buildingID=backguid)
)

case表达式返回单个原子标量值。所以你不能用这种方式回答你的问题吗?