Return 只有 t-sql 列中的数值
Return only numeric values from column in t-sql
我得到了比较两条记录的要求:
我的 table 就像;
EmpNo payband ContractType
123 band 4 permanent
124 band 4 contract
125 band 3 permanent
125 band 4 permanent
125 band 5 reviewbody permanent
现在我想过滤重复记录,我的第一个条件是ContractType='permanent',然后按高频段过滤。在上面 table EmpNo 125
是一名雇员和相同的合同类型我想按高薪带过滤他的记录。 payband column
有点乱
我想要这样的输出:
EmpNo payband ContractType
123 band 4 permanent
125 band 5 permanent
有什么帮助吗?谢谢
我添加了逻辑,如果没有数值,那么任何第一个波段都会输出:
DECLARE @t TABLE
(
EmpNo INT ,
payband NVARCHAR(MAX) ,
ContractType NVARCHAR(MAX)
)
INSERT INTO @t
VALUES ( 123, 'band 4', 'permanent' ),
( 124, 'band 4', 'contract' ),
( 125, 'band 3', 'permanent' ),
( 125, 'band 4 review body', 'permanent' ),
( 128, 'band', 'permanent' );
WITH cte1
AS ( SELECT EmpNo ,
payband ,
ContractType ,
PATINDEX('%[0-9]%', payband) AS pi ,
CHARINDEX(' ', payband, PATINDEX('%[0-9]%', payband)) AS ci
FROM @t
WHERE ContractType = 'permanent'
),
cte2
AS ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY EmpNo ORDER BY CASE
WHEN pi > 0
THEN CAST(SUBSTRING(payband,
pi, ABS(pi - ci)) AS INT)
ELSE 0
END DESC ) AS rn
FROM cte1
)
SELECT EmpNo ,
payband ,
ContractType
FROM cte2
WHERE rn = 1
输出:
EmpNo payband ContractType
123 band 4 permanent
125 band 4 review body permanent
128 band permanent
我得到了比较两条记录的要求: 我的 table 就像;
EmpNo payband ContractType
123 band 4 permanent
124 band 4 contract
125 band 3 permanent
125 band 4 permanent
125 band 5 reviewbody permanent
现在我想过滤重复记录,我的第一个条件是ContractType='permanent',然后按高频段过滤。在上面 table EmpNo 125
是一名雇员和相同的合同类型我想按高薪带过滤他的记录。 payband column
我想要这样的输出:
EmpNo payband ContractType
123 band 4 permanent
125 band 5 permanent
有什么帮助吗?谢谢
我添加了逻辑,如果没有数值,那么任何第一个波段都会输出:
DECLARE @t TABLE
(
EmpNo INT ,
payband NVARCHAR(MAX) ,
ContractType NVARCHAR(MAX)
)
INSERT INTO @t
VALUES ( 123, 'band 4', 'permanent' ),
( 124, 'band 4', 'contract' ),
( 125, 'band 3', 'permanent' ),
( 125, 'band 4 review body', 'permanent' ),
( 128, 'band', 'permanent' );
WITH cte1
AS ( SELECT EmpNo ,
payband ,
ContractType ,
PATINDEX('%[0-9]%', payband) AS pi ,
CHARINDEX(' ', payband, PATINDEX('%[0-9]%', payband)) AS ci
FROM @t
WHERE ContractType = 'permanent'
),
cte2
AS ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY EmpNo ORDER BY CASE
WHEN pi > 0
THEN CAST(SUBSTRING(payband,
pi, ABS(pi - ci)) AS INT)
ELSE 0
END DESC ) AS rn
FROM cte1
)
SELECT EmpNo ,
payband ,
ContractType
FROM cte2
WHERE rn = 1
输出:
EmpNo payband ContractType
123 band 4 permanent
125 band 4 review body permanent
128 band permanent