SQL查询 - 在SQL中消除具有逻辑条件的行

时间:2017-07-25 10:36:07

标签: sql sql-server sql-server-2008

SQL Server查询以删除具有某些算术逻辑的行。 MS SQL

例如:

ID   name  varChar
a1   b1      1
a1   b1      2
a2   b2      4
a2   b2      2
a3   b3      5
a3   b3      8

预期输出

a1   b1  1
a2   b2  2
a3   b3  5

逻辑:我们需要得到每个ID和Name组合,最少var_char值(不幸的是它不是int,我们必须强制转换它)。

请帮我解决这个问题。我尝试过许多逻辑,但没有任何效果。

2 个答案:

答案 0 :(得分:0)

您可以使用如下的row_number:

Select top (1) with ties * from yourtable
   order by Row_Number() over(partition by Id, [Name] order by convert(int,int_value) )
 --you might require to convert to bigint if your value is bigger and in varchar

或者您可以使用子查询:

Select * from (
   Select *, RowN = Row_Number() over(partition by Id, [Name] order by int_value) from yourtable )a
Where a.RowN = 1

输出如下:

+----+------+-----------+
| Id | Name | int_value |
+----+------+-----------+
| a1 | b1   |         1 |
| a2 | b2   |         2 |
| a3 | b3   |         5 |
+----+------+-----------+

Demo

答案 1 :(得分:0)

您可以分组,将varchar转换为int并从中获取最小值。

select ID, name, MIN(convert(int,[varChar])) as minimumVarChar
from [yourtable] t
group by ID, name
order by ID, name;

就个人而言,如果varchar应该只包含整数,那么我只需将表中的类型更改为int。然后你不必在查询中转换它。