首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询以获取具有AddressType one AddressType 2的地址列表?

查询以获取具有AddressType one AddressType 2的地址列表?
EN

Stack Overflow用户
提问于 2018-07-31 14:48:59
回答 6查看 78关注 0票数 1

考虑一下下面的表格

代码语言:javascript
复制
Id  PersonId    Address   AddressTypeId
--------------------------------------------------------------------
1     1         AI1P1T1      1
2     1         AI2P1T2      2  
3     2         AI3P2T2      2

我想写一个查询来打印拥有AddressType =1AddressTypeId=2的人的地址列表,并且

如果person有AddressType =1,则选择它,否则选择person with AddressType =2

预期结果:

代码语言:javascript
复制
Address
--------------
AI1P1T1           
AI3P2T2   
EN

回答 6

Stack Overflow用户

发布于 2018-07-31 15:03:13

日安,

请检查这是否解决了您的需求:

代码语言:javascript
复制
/***************************** DDL+DML */
drop table if exists T;
create table T(Id int,PersonId int, [Address] nvarchar(10), AddressTypeId int)
INSERT T(Id,PersonId, [Address], AddressTypeId)
values
(1,1,'AI1P1T1',1),
(2,1,'AI2P1T2',2),
(3,2,'AI3P2T2',2)
GO

select * from T
GO

/***************************** Solution */
With MyCTE as (
    select *, ROW_NUMBER() OVER (partition by PersonId order by AddressTypeId) as RN
    from T
)
select [Address]
from MyCTE
where 
    AddressTypeId in (1,2) -- if there can be only positive numbers then you can use "< 3"
    and RN = 1
GO
票数 2
EN

Stack Overflow用户

发布于 2018-07-31 15:18:18

您也可以尝试使用joins:

代码语言:javascript
复制
 select t1.PersonId,t1.Address from #T t1 
  inner join (select personid,min(AddressTypeId)atype from #T
  group by PersonId )x 
  on x.atype=t1.AddressTypeId and x.PersonId=t1.PersonId
票数 1
EN

Stack Overflow用户

发布于 2018-07-31 16:29:22

我会写一个子查询,通过窗口函数生成ROW_NUMBER,然后在主查询中使用MAX

代码语言:javascript
复制
SELECT 
    PersonId, MAX(Address) Address
FROM 
    (SELECT
         PersonId,
         (CASE 
             WHEN ROW_NUMBER() OVER (PARTITION BY PersonId ORDER BY PersonId) = 1 
                THEN Address 
          END) Address
     FROM 
         T
     WHERE 
         AddressTypeId IN (1,2)
    ) t1
GROUP BY 
    PersonId

sqlfiddle

结果

代码语言:javascript
复制
| PersonId | Address |
+----------+---------+
|        1 | AI1P1T1 |
|        2 | AI3P2T2 |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51607040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档