我有一张如下所示的表格
[ID] [ Company ] [ShippingCity] [externalID]
1 Microsoft Bellevue MM2547
2 Microsoft Bellevue MM2548
3 Microsoft Seattle MM2549
4 Microsoft Null MM2550
我希望能够在一个select语句中使用该名称,并应用一个逻辑,该逻辑为我提供公司名称。 我正在使用这个逻辑:
SELECT CASE WHEN SHIPPINGCITY IS NULL THEN CONCAT(COMPANY,'-',EXTERNALID)
ELSE CONCAT(COMPANY,'-',SHIPPINGCITY) ELSE **THIS PART IS WHERE i AM LOST**
IF SHIPPING CITY IS SAME ADD THE EXTERNAL ID INTO SECOND RECORD
我知道我只能使用外部ID,但问题是我正在使用的客户端想要最后没有externalID的第一条记录,所以他们正在寻找如下所示的结果:
[ID] [ Company ] [ShippingCity] [externalID]
1 Microsoft-Bellevue Bellevue MM2547
2 Microsoft-Bellevue-MM2548 Bellevue MM2548
3 Microsoft-Seattle Seattle MM2549
4 Microsoft-MM2550 Null MM2550
是否有任何逻辑可用于在单个SELECT语句中获取它?
提前多多感谢
答案 0 :(得分:1)
您可以使用以下逻辑,该逻辑使用row_number根据公司和shippingcity对其进行分区。希望对你有意义。
DECLARE @t TABLE (ID INT, Company VARCHAR(255), ShippingCity VARCHAR(255), ExternalId VARCHAR(255))
INSERT INTO @t VALUES
(1,'Microsoft','Bellevue','MM2547'),
(2,'Microsoft','Bellevue','MM2548'),
(3,'Microsoft','Seattle','MM2549'),
(4,'Microsoft',Null,'MM2550')
SELECT sub.ID,
CASE WHEN sub.ShippingCity IS NULL THEN sub.Company + '-' + sub.ExternalId
WHEN sub.r = 1 THEN sub.Company + '-' + sub.ShippingCity
WHEN sub.r > 1 THEN sub.Company + '-' + sub.ShippingCity + '-' + sub.ExternalId END AS Company
, sub.ShippingCity, sub.ExternalId
FROM
(
SELECT Id, Company, ShippingCity, ExternalId,
ROW_NUMBER() OVER(PARTITION BY Company, ShippingCity ORDER BY Company, ShippingCity, ExternalId) AS r
FROM @t
) AS sub
ORDER BY ID
结果
ID Company ShippingCity ExternalId
----------------------------------------------------------
1 Microsoft-Bellevue Bellevue MM2547
2 Microsoft-Bellevue-MM2548 Bellevue MM2548
3 Microsoft-Seattle Seattle MM2549
4 Microsoft-MM2550 NULL MM2550
答案 1 :(得分:1)
这应该可以解决问题: -
select
id,
case
when ShippingCity is null then Company + '-' + ExternalID
when row_number() over(partition by Company, ShippingCity order by ExternalID) = 1 then Company + '-' + ShippingCity
else Company + '-' + ShippingCity + '-' + ExternalID
end as [Company],
ShippingCity,
ExternalID
from [Your Table]
order by id