例如,表三米的cols和數據SQL沒有Dup的(不同)的行,卻忽略一個山坳
col1 col2 col3
10 20 30
40 50 60
40 50 80
想要做一個選擇,其中最後兩行只返回一個因爲col1和COL2是相同的。
由於col3不同,選擇不同將不起作用。
所以輸出將
10 20 30
40 50 xx (don't care)
例如,表三米的cols和數據SQL沒有Dup的(不同)的行,卻忽略一個山坳
col1 col2 col3
10 20 30
40 50 60
40 50 80
想要做一個選擇,其中最後兩行只返回一個因爲col1和COL2是相同的。
由於col3不同,選擇不同將不起作用。
所以輸出將
10 20 30
40 50 xx (don't care)
因爲你只需要一個額外的列你可以使用任意MIN
/MAX
骨料和GROUP BY
SELECT col1,
col2,
MAX(col3) AS col3
FROM YourTable
GROUP BY col1,
col2
更普遍的,如果你的RDBMS支持解析函數你可以使用
WITH T
AS (SELECT col1,
col2,
col3,
ROW_NUMBER() OVER (PARTITION BY col1, col2
ORDER BY col1, col2) AS RN
FROM YourTable)
SELECT col1,
col2,
col3
FROM T
WHERE RN = 1
我這樣做在SQL Server:
-- Setup test data:
declare @table table (
col1 int,
col2 int,
col3 int
)
insert into @table values (10, 20, 30)
insert into @table values (40, 50, 60)
insert into @table values (40, 50, 80)
-- Here's the query:
select col1, col2, cast(min(col3) as varchar(10)) as col3
from @table
group by col1, col2
having count(*) = 1
union all
select col1, col2, 'xx' as col3
from @table
group by col1, col2
having count(*) > 1
我想這假定您有沒有重複的行(其中所有字段是重複的),否則你就會有一個可能不正確「XX」。
哪一個應該退回?哪個RDBMS? – 2012-02-02 16:23:10