SQL查询添加自定义值选择基于对不同的列值
我有一个子查询该表中选择:SQL查询添加自定义值选择基于对不同的列值
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
testIDs的名单,结果他们得到了与用户的名称。 我希望能够得到这个SELECT语句: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
最好,因为这是一个子查询从JOIN这是一个()
内,这是相当可观的已经(我省略了一堆列这里)。
有没有办法做到这一点?
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
非常感谢! – Danicco 2014-11-06 14:23:58
您可以使用DENSE_RANK
得到这个:
SELECT Name,
ResultType,
TestID,
TestNumber = DENSE_RANK() OVER(PARTITION BY Name ORDER BY TestID)
FROM <Subquery>;
例如在SQL小提琴
完整的例子
IF OBJECT_ID(N'tempdb..#T', 'U') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T ([Name] VARCHAR(4), [ResultType] VARCHAR(8), [TestID] INT)
INSERT INTO #T ([Name], [ResultType], [TestID])
VALUES
('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);
SELECT Name,
ResultType,
TestID,
TestNumber = DENSE_RANK() OVER(PARTITION BY Name ORDER BY TestID)
FROM #T
ORDER BY Name, TestID;
嘿,我很慢,我做了一些工作,所以贴在它上面...我没有复制 – 2014-11-06 14:19:45
也谢谢!虽然你迟了3分钟呵呵 – Danicco 2014-11-06 14:24:13
计算独特testid的逻辑是什么? – 2014-11-06 14:06:51
@SanjayGoswami这是'PIVOT'查询的一部分,我需要将不同值的'TestID'分组,因此无论用户如何,我都可以对它们进行转换(因为'TestID'值是自动递增的) – Danicco 2014-11-06 14:09:02