我有一张拥有数百万条记录的表。从两个字段中选择不同的行
所以我可能有这些列
A,B,C,d
,我需要选择基于列a和b的所有不重复的记录。
但我需要选择列a,b,c和d不只是a和b。
我可以这样做吗?
编辑
数据可能会
1,1,青蛙,绿色
1,1,青蛙,棕色
2,1,猫,黑
2,4,狗,白色
所以我需要;
1,1,青蛙,绿色
2,1,猫,黑
2,4,狗,白
我有一张拥有数百万条记录的表。从两个字段中选择不同的行
所以我可能有这些列
A,B,C,d
,我需要选择基于列a和b的所有不重复的记录。
但我需要选择列a,b,c和d不只是a和b。
我可以这样做吗?
编辑
数据可能会
1,1,青蛙,绿色
1,1,青蛙,棕色
2,1,猫,黑
2,4,狗,白色
所以我需要;
1,1,青蛙,绿色
2,1,猫,黑
2,4,狗,白
SQL Server支持公共表表达式和窗口功能。下面的查询使用ROW_NUMBER()
,根据组排列记录。它按c ASC, d ASC
排序(只是玩)。
WITH records
AS
(
SELECT a, b, c, d,
ROW_NUMBER() OVER(PARTITION BY a, b ORDER BY c, d) rn
FROM TableName
)
SELECT a, b, c, d
FROM records
WHERE rn = 1
我认为这是工作。我会再测试一下,让你知道。谢谢 – griegs 2013-04-10 04:49:26
分区的是你的男人
SELECT a, b, c, d FROM (
SELECT a, b, c, d, ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY a, b) rn
FROM table
) sq
where rn = 1
请尝试:
select *
From(
select
row_number() over (partition by a, b order by a, b) RNum,
*
from
YourTable
)x
where RNum=1
样品
select * From(
select row_number() over (partition by a, b order by a, b) RNum, *
from(
select 1 a, 1 b, 'frog' c, 'green' d union all
select 1 a, 1 b, 'frog' c, 'brown' d union all
select 2 a, 1 b, 'cat' c, 'black' d union all
select 2 a, 4 b, 'dog' c, 'white' d)x
)y
where RNum=1
你可以给样本记录你想要的结果?至少有10条记录会做得很好 – 2013-04-10 04:36:25
为什么第一行是'1,1,青蛙,绿色'而不是'1,1,青蛙,棕色'? PS:不,在DBMS中没有“自然”的命令,没有内置的“第一个”条件 – zerkms 2013-04-10 04:39:01
@zerkms,这有什么关系吗?数据是数据,我无法改变它。我只需要列a和b形成一对唯一对的第一条记录 – griegs 2013-04-10 04:40:25