我有运行时间表给我输出像:
NO COMPANY NAME CONTACT NO
1 ABC DEF PVT 1234567890
2 ABC DEF PVT. 1234567890
3 XYZ ABC LTD 987654321
4 XYZ ABC LTD PVT. 987654321
此处,NO
是主键。
我想只显示第一个&第3排。
我的条件是前5个字符匹配,只考虑重复行并将其删除。即删除第二个&第四。
答案 0 :(得分:1)
这是关于如何排除重复项的建议
测试数据:
DECLARE @tbl TABLE(NO INT,[COMPANY NAME] VARCHAR(100),[CONTACT NO] VARCHAR(100))
INSERT INTO @tbl
VALUES
(1,'ABC DEF PVT','1234567890'),
(2,'ABC DEF PVT.','1234567890'),
(3,'XYZ ABC LTD','987654321'),
(4,'XYZ ABC LTD PVT.','987654321'),
(5,'ABC DEF PVT','9994567890')
<强>查询:强>
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY SUBSTRING([COMPANY NAME],1,5),[CONTACT NO]
ORDER BY NO) AS RowNbr,
tbl.*
FROM
@tbl AS tbl
)
SELECT
*
FROM
CTE
WHERE
CTE.RowNbr=1
要完成相同的结果,您也可以在没有公用表表达式的情况下执行此操作。像这样:
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY SUBSTRING([COMPANY NAME],1,5),[CONTACT NO]
ORDER BY NO) AS RowNbr,
tbl.*
FROM
@tbl AS tbl
) AS t
WHERE t.RowNbr=1
<强>结果:强>
1 1 ABC DEF PVT 1234567890
1 3 XYZ ABC LTD 987654321
1 3 XYZ ABC LTD 987654321
参考: