试试这个代码来得到你的确切结果
Create Table #TempTable
(
MainType varchar(4),
LineType varchar(6)
)
Insert Into #TempTable
Values
('A', 'Aa'),
('A', 'Ab'),
('A', 'Aa'),
('A', 'Ac'),
('A', 'Ab'),
('B', 'Aa'),
('B', 'Ab'),
('B', 'Ab'),
('B', 'Ac'),
('B', 'Ab'),
('C', 'Aa'),
('C', 'Ac'),
('C', 'Aa')
以上是样本数据。获取结果的脚本
SELECT CASE
WHEN Lag(maintyperank)
OVER(
ORDER BY maintyperank) = maintyperank THEN ''
ELSE maintyperank
END AS MainType,
linetyperank
FROM (SELECT *,
maintype + '('
+ Cast(Dense_rank()OVER(ORDER BY maintype) AS VARCHAR(5))
+ ')' AS MainTypeRank,
linetype + '('
+ Cast(Row_number() OVER (partition BY maintype, linetype ORDER
BY
linetype)AS
VARCHAR(5))
+ ')' AS LineTypeRank
FROM #TempTable)Dt
结果
MainType linetyperank
-------------------------
A(1) Aa(1)
Aa(2)
Ab(1)
Ab(2)
Ac(1)
B(2) Aa(1)
Ab(1)
Ab(2)
Ab(3)
Ac(1)
C(3) Aa(1)
Aa(2)
Ac(1)