我有一个包含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号码,但没有任何冗余。
答案 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 by
和distinct
之间的区别,请在此处阅读:
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