Sql server SQL查询根据不同的列值添加要选择的自定义值
我从子查询选择此表:Sql server SQL查询根据不同的列值添加要选择的自定义值,sql-server,Sql Server,我从子查询选择此表: Name ResultType TestID Guy1 Result A 1 Guy1 Result B 1 Guy1 Result C 1 Guy1 Result A 2 Guy1 Result C 2 Guy1 Result B 3 Guy2 Result A 4 Guy2 Result C 4 Guy3 Result D
Name ResultType TestID
Guy1 Result A 1
Guy1 Result B 1
Guy1 Result C 1
Guy1 Result A 2
Guy1 Result C 2
Guy1 Result B 3
Guy2 Result A 4
Guy2 Result C 4
Guy3 Result D 5
Guy3 Result A 6
--ETC
测试列表、测试结果和用户姓名。
我希望能够在SELECT语句中获得以下内容:
Name ResultType TestID WhichTestNumberWasIt
Guy1 Result A 1 1
Guy1 Result B 1 1
Guy1 Result C 1 1 --The first distinct TestID for this user
Guy1 Result A 2 2
Guy1 Result C 2 2 --The second
Guy1 Result B 3 3 --And third
Guy2 Result A 4 1 --This is the first distinct TestID for this user
Guy2 Result C 4 1
Guy3 Result D 5 1 --Again, same distinct TestID for another user
Guy3 Result A 6 2
--ETC
最好在SELECT语句中执行,因为这是一个来自()
内部联接的子查询,并且它已经相当大了(我在这里省略了一组列)
有什么方法可以做到这一点吗?您可以使用以下方法:
SELECT Name,
ResultType,
TestID,
TestNumber = DENSE_RANK() OVER(PARTITION BY Name ORDER BY TestID)
FROM <Subquery>;
您可以使用来获取以下信息:
SELECT Name,
ResultType,
TestID,
TestNumber = DENSE_RANK() OVER(PARTITION BY Name ORDER BY TestID)
FROM <Subquery>;
计算distinct testid的逻辑是什么?@SanjayGoswami这是
PIVOT
查询的一部分,我需要按distinct值对testid
进行分组,这样我就可以在不考虑用户的情况下透视它们(因为testid
值是自动递增的)计算distinct testid的逻辑是什么?@SanjayGoswami这是PIVOT
查询的一部分,我需要按distinct值对testid
进行分组,这样我就可以在不考虑用户的情况下对其进行透视(因为testid
值是自动递增的)嘿,我很慢,我做了一些工作,所以发布了它。。。我没复印谢谢你!虽然你迟到了3分钟,呵呵,我很慢,我做了一些工作,所以在上面发布。。。我没复印谢谢你!虽然你迟到了3分钟呵呵
CREATE TABLE #tmp
(
NAME VARCHAR(100),
RT VARCHAR(50),
testid INT
)
Insert into #tmp values('Guy1','Result A',1)
Insert into #tmp values('Guy1','Result B',1)
Insert into #tmp values('Guy1','Result C',1)
Insert into #tmp values('Guy1','Result A',2)
Insert into #tmp values('Guy1','Result C',2)
Insert into #tmp values('Guy1','Result B',3)
Insert into #tmp values('Guy2','Result A',4)
Insert into #tmp values('Guy2','Result C',4)
Insert into #tmp values('Guy3','Result D',5)
Insert into #tmp values('Guy3','Result A',6)
SELECT *,DENSE_RANK() Over( PARTITION BY NAME ORDER BY TestID ASC) as Rank FROM #tmp