SQL Server-如果所有列中有一列是唯一的,请选择此选项
我想选择多个列是否相同的一行。例如:SQL Server-如果所有列中有一列是唯一的,请选择此选项,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我想选择多个列是否相同的一行。例如: col1 col2 col3 col4 a b 1 2 b b 1 2 a c 1 2 b b 1 3 a c 2 1 条件:仅当列col1、col2、col3的值与其他行不同且col4的值为相同行的最大值时,才选择此选项 例如,预期输出为: a b 1 2 b b 1 3 a c 1 2 a
col1 col2 col3 col4
a b 1 2
b b 1 2
a c 1 2
b b 1 3
a c 2 1
条件:仅当列col1、col2、col3的值与其他行不同且col4的值为相同行的最大值时,才选择此选项
例如,预期输出为:
a b 1 2
b b 1 3
a c 1 2
a c 2 1
是的,可能的话,只需将group by与最大聚合一起使用即可
是的,可能的话,只需将group by与最大聚合一起使用即可
强制不存在解决方案。。。您的条件写为不存在查询:
DECLARE @t TABLE (col1 varchar(100), col2 varchar(100), col3 int, col4 int);
INSERT INTO @t VALUES
('a', 'b', 1, 2),
('a', 'c', 1, 2),
('a', 'c', 2, 1),
('b', 'b', 1, 2),
('b', 'b', 1, 3);
SELECT *
FROM @t AS t
WHERE NOT EXISTS (
SELECT 1
FROM @t AS dup
WHERE dup.col1 = t.col1
AND dup.col2 = t.col2
AND dup.col3 = t.col3
AND dup.col4 > t.col4 -- outer row has smaller col4
)
强制不存在解决方案。。。您的条件写为不存在查询:
DECLARE @t TABLE (col1 varchar(100), col2 varchar(100), col3 int, col4 int);
INSERT INTO @t VALUES
('a', 'b', 1, 2),
('a', 'c', 1, 2),
('a', 'c', 2, 1),
('b', 'b', 1, 2),
('b', 'b', 1, 3);
SELECT *
FROM @t AS t
WHERE NOT EXISTS (
SELECT 1
FROM @t AS dup
WHERE dup.col1 = t.col1
AND dup.col2 = t.col2
AND dup.col3 = t.col3
AND dup.col4 > t.col4 -- outer row has smaller col4
)
当您实际尝试编写SQL查询时,SQL查询变得越来越可能。也就是说,你自己试过回答这个问题吗?你有两个答案,因为当你说col4是最大值时,你不清楚你的意思是什么。最大值是什么?可乐3和可乐4?其他匹配行?还有别的吗?@TimBiegeleisen我试过使用distinct,但没有成功point@Hogan我不明白你们的意思,伙计们。col4的值是整数,所以若有多个相同的行,它将返回row have max value forcol4@HungNguyen如果在实际编写SQL查询时,SQL查询变得越来越可能,那就太好了。也就是说,你自己试过回答这个问题吗?你有两个答案,因为当你说col4是最大值时,你不清楚你的意思是什么。最大值是什么?可乐3和可乐4?其他匹配行?还有别的吗?@TimBiegeleisen我试过使用distinct,但没有成功point@Hogan我不明白你们的意思,伙计们。col4的值是整数,所以若有多个相同的行,它将返回row have max value forcol4@HungNguyen如果你的方法是最基本、最简单、最好的方法,那就太好了,我只需要提醒你行数方法。最好有一种替代方法,也只是用于引用。@iSR5是的,这适用于某些情况,主要是与子查询一起使用的行数。谢谢。@iSR5-当本例中的其他列col1、col2、col3不相同时,使用行号。例如,返回同一部门编号中具有最高工资的人员的值。行数在这里毫无意义。虽然你的方法是最基本、最简单和最好的方法,但我只需要提醒你行数方法也是如此。最好有一种替代方法,也只是用于引用。@iSR5是的,这适用于某些情况,主要是与子查询一起使用的行数。谢谢。@iSR5-当本例中的其他列col1、col2、col3不相同时,使用行号。例如,返回同一部门编号中具有最高工资的人员的值。排号在这里没有意义。