我有一張擁有數百萬條記錄的表。從兩個字段中選擇不同的行
所以我可能有這些列
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