我有以下数据
我需要的是这样的东西
有可能得到这样的数据吗?
我做了一些研究,并获得洞察力使用领先/滞后函数,但结果并不在意料之中,这是我尝试
SELECT Id, Username, Distributor,
LEAD(Id) OVER (PARTITION BY Username ORDER BY Id) AS IdNew,
LEAD(Distributor) OVER (PARTITION BY Username ORDER BY Id) AS IdNew
FROM UserDist
--更新--
如@gotqn所述,是,我已经尝试为具有相同Id的每个数据添加唯一密钥
例如,我想从seq = 1用户名joe获取数据
DROP Table IF EXISTS #Temp
CREATE TABLE #Temp
(
Seq INT,
Id INT,
Username NVARCHAR(100),
Distributor NVARCHAR(100)
)
INSERT INTO #Temp(Seq, Id, Username, Distributor)
select DENSE_RANK() OVER (PARTITION BY Username ORDER BY IdDum) AS Seq,
Id, Username, Distributor
from UserDist
select * from #Temp A
Seq Id Username Distributor
1 1 Joe RNN
1 1 Joe CNN
1 1 Joe SSN
2 2 Joe DSS
2 2 Joe DDK
3 4 Joe GER
3 4 Joe RIG
3 4 Joe POL
3 4 Joe MOD
1 3 Kelly OPK
1 3 Kelly DLC
2 5 Kelly DERMA
2 5 Kelly KOI
2 5 Kelly DELL
而不是像返回我需要的,它返回冗余数据
select * from #Temp A LEFT JOIN #Temp B ON A.Username = B.Username AND A.Seq + 1 = B.Seq
WHERE A.Seq = 1 AND A.Username = 'Joe'
Seq Id Username Distributor Seq Id Username Distributor
1 1 Joe RNN 2 4 Joe DSS
1 1 Joe RNN 2 5 Joe DDK
1 2 Joe CNN 2 4 Joe DSS
1 2 Joe CNN 2 5 Joe DDK
1 3 Joe SSN 2 4 Joe DSS
1 3 Joe SSN 2 5 Joe DDK
1条答案
按热度按时间nuypyhwy1#
这是不可能的,因为您无法以唯一的方式对每个用户的数据进行排序。您需要有附加列(例如row - id)。它不必是表定义的一部分,您可以使用
ROW_NUMBER
计算它,如下所示:然后对数据进行排序,您只需要加入到数据本身,如下所示:
以上将是基本查询。