当前位置: 代码迷 >> Sql Server >> 从数据库中提掏出某列值唯一的记录
  详细解决方案

从数据库中提掏出某列值唯一的记录

热度:16   发布时间:2016-04-24 18:16:01.0
从数据库中提取出某列值唯一的记录
数据表 A 有  N个字段

主键   字段1  字段2  字段3.。   字段N
--------------------------------------------------
1        1        。。     。。               x
2        1        。。     。。               x
3        0        。。     。。               x
4        2        。。     。。               x
5        3        。。     。。               x
6        0        。。     。。               x
7        2        。。     。。               x
8        3        。。     。。               x
9        0        。。     。。               y
10      3        。。     。。               x
--------------------------------------------
其中字段1 不为主键,它  的值 ,有多种,
现 需从表A中提取 记录,满足以下条件:

1  字段1的值,除0外,其它多个重复值中选择一个 ,且它的主键id在重复值所在记录id中 最小
2  字段N 的值,应等于固定值 x

希望得到结果集如下:
-----------------------------------------------
主键   字段1  字段2  字段3. 字段N
1        1        。。     。。          X
3        0        。。     。。          X
4        2        。。     。。          X
5        3        。。     。。          X
6        0        。。     。。          X




请问如何写代码?
谢谢
------解决方案--------------------

SELECT [ID], 字段1, 字段2, 字段3 
FROM ([ID], 字段1, 字段2, 字段3, ROW_NUMBER() OVER(PARTITION BY 字段1 ORDER BY [ID]) AS RN 
FROM T ) R 
WHERE R.RN = 1 OR R.字段1 = 0 
ORDER BY R.ID 

------解决方案--------------------
SELECT * --这里把你要显示的列显示出来,但是不要显示oid
FROM (
SELECT *,ROW_NUMBER()OVER(PARTITION BY 字段1 ORDER BY 主键) oid
FROM a
WHERE 字段N='X'
UNION ALL
SELECT *,1 oid
FROM A
WHERE 字段1=0)a
WHERE a.oid=1
这是2005的写法
------解决方案--------------------

SELECT * 
FROM a a1 
WHERE 主键 IN
(
SELECT TOP 1 主键
FROM a
WHERE 字段1=a1.字段1 AND 字段1<>0 AND 字段N='X'
ORDER BY 主键
)
  相关解决方案