Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-如果所有列中有一列是唯一的,请选择此选项_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

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不相同时,使用行号。例如,返回同一部门编号中具有最高工资的人员的值。排号在这里没有意义。