-3

我有一个有 3 列的表: - ID - FROM - TO 而且我有这样的数据

-----------------------
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

4 回答 4

1

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

select [from] from mytable group by [from]

如果你想看看你有多少 froms,你所要做的就是:

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

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

如果您想了解和之间的区别,请阅读此处group bydistinct使用 group by 与 distinct 时的巨大性能差异

于 2013-09-05T18:57:21.333 回答
1

利用DISTINCT

SELECT DISTINCT from,to FROM yourTable WHERE to = 1

于 2013-09-05T18:54:53.253 回答
1

使用不同的关键字

select distinct m.from,m.to from mytable as m;
于 2013-09-05T18:56:42.783 回答
1

不知道你到底是什么意思select distinct [FROM] from TableName where [TO] = 1

或者

对于给定的 [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
于 2013-09-05T19:04:16.390 回答