J'essaie de réaliser quelque chose comme ça.
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
Je voulais afficher la colonne État et ville dans la clause where uniquement lorsque backguid est vide, c'est-à-dire 00000000-0000-0000-0000-000000000000. Sinon, je veux afficher une seule colonne, c'est-à-dire buildingID=backguid
Le code global que j'ai utilisé ici est :
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
Cependant, je ne suis pas en mesure d'y parvenir via Case. Je ne sais pas ce qui me manque.
Cela peut aider
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)
)
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots