SQL Server:只选择一行在某些库存上具有相同ID的行

时间:2013-09-05 18:52:32

标签: sql sql-server

我有一个包含3列的表:  - ID   - 来自  - 至 我有这样的数据

-----------------------
ID   |   FROM   |   TO
1    |   2      |   1
2    |   5      |   1
3    |   7      |   1
4    |   2      |   1
5    |   2      |   1
6    |   9      |   1
7    |   3      |   1
8    |   4      |   1
9    |   5      |   1

我想创建一个查询,选择TO = 1的所有行,我不想显示以前检索过的行,例如我有多行,其中FROM = 2和TO = 1,我只需要仅检索该行一次。

我的桌子看起来并不像这样但是我给出了一个小例子,因为我的目的是收集所有的FROM号码,但没有任何冗余。

4 个答案:

答案 0 :(得分:1)

使用DISTINCT

SELECT DISTINCT from,to FROM yourTable WHERE to = 1

答案 1 :(得分:1)

使用不同的关键字

select distinct m.from,m.to from mytable as m;

答案 2 :(得分:1)

您只需按要显示的列进行分组:

select [from] from mytable group by [from]

如果你想知道你有多少人,你需要做的就是:

select [from], count(*) from mytable group by [from]

您可以使用distinct,但它会比分组慢,但需要更多内存。

如果您想要解释group bydistinct之间的区别,请在此处阅读: Huge performance difference when using group by vs distinct

答案 3 :(得分:1)

不确定您的意思select distinct [FROM] from TableName where [TO] = 1

OR

对于给定的[TO],每个不同的[FROM]值可能需要单行吗?

;with cte as (
    select ID, [FROM], [TO],
        rn = row_number() over (partition by [FROM] order by ID)
    from TableName
    where [TO] = 1
)
select ID, [FROM], [TO]
from cte
where rn=1