Я работаю с адресами и хочу показать страны, только если они не находятся в Великобритании.Это работает, но у меня осталась запятая только на британских адресах, и я не уверен, как ее удалить.Я предполагаю, что мой STUFF
не правильный синтаксис, или мне нужно сделать это по-другому?
http://sqlfiddle.com/#!18/2cb48/5
Пример данных:
CREATE TABLE [dbo].[AddressDetails]
(
[AddressID] int IDENTITY(1,1) PRIMARY KEY NOT NULL,
[PropertyNumber] [nvarchar](50) NULL,
[PropertyName] [nvarchar](40) NULL,
[Street] [nvarchar](40) NULL,
[Locality] [nvarchar](40) NULL,
[Town] [nvarchar](40) NULL,
[PostCode] [nvarchar](15) NULL,
[County] [nvarchar](40) NULL,
[Country] [nvarchar](40) NULL,
)
INSERT INTO AddressDetails(PropertyNumber, PropertyName, Street, Locality, Town, PostCode, County, Country)
VALUES
('1', NULL, 'Main Street', 'Ilford', 'London', 'E1 1JA', 'Londonshire', 'United Kingdom'),
('135', NULL, 'Apple Avenue', NULL, 'Reading', 'RG15 2FC', 'Berkshire', 'GB'),
('115/A', 'Cool Building', 'Siskin Close', 'Bushey', 'Watford', 'WD23 2HN', 'Greater London', 'GB'),
('1600', 'Amphitheatre', NULL, 'Parkway', 'Mountain View', '94043', 'California', 'USA'),
('7221', NULL, 'Shore Lane', 'Hempstead', 'NY', '11550', NULL, 'America!')
Запрос:
SELECT STUFF(
COALESCE(', '+NULLIF([PropertyName],''),'')
+COALESCE(', '+NULLIF(PropertyNumber,''),'')
+COALESCE(', '+NULLIF([Street],''),'')
+COALESCE(', '+NULLIF([Locality],''),'')
+COALESCE(', '+NULLIF([Town],''),'')
+COALESCE(', '+UPPER(NULLIF([Postcode],'')),'')
+COALESCE(', '+ CASE WHEN UPPER([Country]) IN ('GB', 'UNITED KINGDOM') THEN '' ELSE UPPER(NULLIF([Country],'')) END,'')
,1,2,'') as [FullAddress]
FROM AddressDetails
Выход:
1, Main Street, Ilford, London, E1 1JA,
135, Apple Avenue, Reading, RG15 2FC,
Cool Building, 115/A, Siskin Close, Bushey, Watford, WD23 2HN,
Amphitheatre, 1600, Parkway, Mountain View, 94043, USA
7221, Shore Lane, Hempstead, NY, 11550, AMERICA!
Желаемый выход:
1, Main Street, Ilford, London, E1 1JA
135, Apple Avenue, Reading, RG15 2FC
Cool Building, 115/A, Siskin Close, Bushey, Watford, WD23 2HN
Amphitheatre, 1600, Parkway, Mountain View, 94043, USA
7221, Shore Lane, Hempstead, NY, 11550, AMERICA!