Sql 具有多个可能值但仅返回1个值的查询表
我有一个表,它根据ID保存了多个值,表中有标志来标识值的含义。也不能保证每个标志都有记录。这是一个地址字段,因此其中有家庭、业务和其他方面的标志。我需要首先查询表并获取家庭地址(如果存在),如果不存在,则获取业务。我不知道该怎么做。这也是我正在使用的SQL Server 2016。使用以下分析功能:Sql 具有多个可能值但仅返回1个值的查询表,sql,sql-server,Sql,Sql Server,我有一个表,它根据ID保存了多个值,表中有标志来标识值的含义。也不能保证每个标志都有记录。这是一个地址字段,因此其中有家庭、业务和其他方面的标志。我需要首先查询表并获取家庭地址(如果存在),如果不存在,则获取业务。我不知道该怎么做。这也是我正在使用的SQL Server 2016。使用以下分析功能: Select * from (Select t.*, Row_number() over (partition by id order
Select * from
(Select t.*,
Row_number()
over (partition by id
order by case when flag = 'home' then 1
when flag = 'business' then 2
else 3 end) as rn
From t) t
Where rn = 1
使用以下分析功能:
Select * from
(Select t.*,
Row_number()
over (partition by id
order by case when flag = 'home' then 1
when flag = 'business' then 2
else 3 end) as rn
From t) t
Where rn = 1
尝试在查询中使用CASE-WHEN语句。比如: 选择
案例
当Home不为空时,则Home
当Home为NULL且Business不为NULL时,则Business
ELSE NULL
结束为固定地址在查询中尝试使用CASE-WHEN语句。比如: 选择
案例
当Home不为空时,则Home
当Home为NULL且Business不为NULL时,则Business
ELSE NULL
结束为固定地址您可以使用
行编号
按客户/个人/实体标识符对数据进行分区,但根据您的标志优先显示家庭、业务和其他
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY CustomerId
ORDER BY IsHome DESC, IsBusiness DESC, IsOther DESC) AS RowNum FROM @Address) T
WHERE T.RowNum = 1
这适用于以下示例数据:
DECLARE @Address TABLE (
ID INT, -- ID of the address
CustomerId INT, -- Whichever field identifies the owner of multiple addresses
IsHome BIT, -- Flag for home
IsBusiness BIT, -- Flag for business
IsOther BIT -- Flag for other
)
INSERT @Address VALUES (1,1,1,0,0), (1,1,0,1,0), (1,1,0,0,1)
您可以使用
行编号
按客户/个人/实体标识符对数据进行分区,但根据您的标志进行优先级排序,以显示家庭、业务和其他
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY CustomerId
ORDER BY IsHome DESC, IsBusiness DESC, IsOther DESC) AS RowNum FROM @Address) T
WHERE T.RowNum = 1
这适用于以下示例数据:
DECLARE @Address TABLE (
ID INT, -- ID of the address
CustomerId INT, -- Whichever field identifies the owner of multiple addresses
IsHome BIT, -- Flag for home
IsBusiness BIT, -- Flag for business
IsOther BIT -- Flag for other
)
INSERT @Address VALUES (1,1,1,0,0), (1,1,0,1,0), (1,1,0,0,1)
请提供样本数据和期望的结果。对不起,你是对的,我应该给出一些例子。这里是我正在看的:表格:地址ID标志完整地址123家123任何街道,任何城镇,ST 12345 123商业455其他街道,纽敦,ST 12345 455家4558另一条街,任何城镇,ST 12345结果需要ID标志完整地址123家123任何街道,任何城镇,ST 12345 455 Home 4558另一条街,SomeTown,ST 12345请提供示例数据和所需结果。对不起,你说得对,我应该给出一些示例。这里是我正在看的:表格:地址ID标志完整地址123家123任何街道,任何城镇,ST 12345 123商业455其他街道,纽敦,ST 12345 455家4558另一条街,任何城镇,ST 12345结果需要ID标志完整地址123家123任何街道,任何城镇,ST 12345 455 Home 4558 ST 12345 SomeTown另一条街