首页 > 解决方案 > 选择具有该表的特定字段的不同值的表的值

问题描述

假设这个数据库表:

DECLARE @SUBSTITUTE TABLE(SUBSTITUTECODE varchar(25), COLORCODE varchar(15), SIZEPOS smallint);

INSERT INTO @SUBSTITUTE(SUBSTITUTECODE, COLORCODE, SIZEPOS) VALUES
('002252200005001', 'BLK', 2),
('002252200005002', 'BLK', 3),
('002252200005004', 'BLK', 5),
('002252200005005', 'BLK', 6),
('002252200005006', 'BLK', 10),
('002252200005007', 'BLK', 11),
('0022522005003', 'BLK', 4),
('0022522005004', 'BLK', 5);

我想得到所有SUBSTITUTECODE, COLORCODE, SIZEPOSwhere SIZEPOSis unique - 对每个重复值进行第一次迭代。

替代代码 色标 SIZEPOS
002252200005001 黑色 2
002252200005002 黑色 3
002252200005004 黑色 5
002252200005005 黑色 6
002252200005006 黑色 10
002252200005007 黑色 11
0022522005003 黑色 4

最接近的类似问题来自 MySQL

先感谢您!

标签: sql-servertsqldistinct

解决方案


请检查这是否能解决您的需求

DECLARE @SUBSTITUTE TABLE(SUBSTITUTECODE varchar(25), COLORCODE varchar(15), SIZEPOS smallint);

INSERT INTO @SUBSTITUTE(SUBSTITUTECODE, COLORCODE, SIZEPOS) VALUES
('002252200005001', 'BLK', 2),
('002252200005002', 'BLK', 3),
('002252200005004', 'BLK', 5),
('002252200005005', 'BLK', 6),
('002252200005006', 'BLK', 10),
('002252200005007', 'BLK', 11),
('0022522005003', 'BLK', 4),
('0022522005004', 'BLK', 5);

;With MyCTE AS (
    SELECT SUBSTITUTECODE, COLORCODE, SIZEPOS
        , RN = row_number() over (partition by SIZEPOS order by SUBSTITUTECODE) -- I assume that "first" you mean when ordering by SUBSTITUTECODE
    FROM @SUBSTITUTE
)
SELECT SUBSTITUTECODE, COLORCODE, SIZEPOS
FROM MyCTE
WHERE RN = 1

推荐阅读