【发布时间】:2021-12-19 05:29:28
【问题描述】:
| cus_id | seqnum | street | city |
|---|---|---|---|
| 123 | 4 | 2 Main | NYC |
| 512 | 2 | 5 Elm | LA |
| 512 | 1 | 5 Elm | LA |
| 423 | 3 | 7 Wes | Paris |
| 512 | 3 | 4 Nav | LA |
我有一个带有 SeqNum 的表地址,我想选择最低 seqnum 的地址作为 MainAdress。如果客户有多个地址,则选择下一个为 ScondaryAddress。如果街道与前一条街道匹配,则跳过它并移动下一个 seqnum。
如果客户有多个地址,我的查询是选择错误的街道。
;with base AS
(
select SEQNUM,
STREET AS MainAdress,
--ROW_NUMBER() OVER(partition by street ORDER BY SEQNUM ASC) AS ROW,
*
FROM ADDRESS WHERE seqnum =1
)
,ADDRESS AS
(
SELECT
STREET AS SecondaryAdress,
*
FROM BASE WHERE seqnum =2
)
但这不是动态获取街道
【问题讨论】:
-
如果街道匹配 为什么这种情况甚至允许存在于您的表中?修复您的架构以防止重复,您的原始查询可以完美且更高效地运行。
标签: sql sql-server tsql common-table-expression