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,我们必须强制转换它)。
请帮我解决这个问题。我尝试过许多逻辑,但没有任何效果。
答案 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 |
+----+------+-----------+
答案 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。然后你不必在查询中转换它。