--表
DECLARE @T TABLE(ID INT IDENTITY(1,1), GROUP_I INT, VALUE INT, C INT,D INT)
INSERT INTO @T SELECT 1,1.1,NULL,NULL
UNION ALL SELECT 1,1.2,NULL,NULL
UNION ALL SELECT 1,1.3,NULL,NULL
UNION ALL SELECT 1,1.4,NULL,NULL
UNION ALL SELECT 2,1.5,NULL,NULL
UNION ALL SELECT 2,1.6,NULL,NULL
UNION ALL SELECT 2,1.7,NULL,NULL
UNION ALL SELECT 2,1.8,NULL,NULL
UNION ALL SELECT 2,1.9,NULL,NULL
--要求:
1:根据GROUP_I 分组,然后根据C 的最大值,提取该记录.
2:如果分组后C 的最大值有相同的记录,则随机提取一条.
--求相关SQL
DECLARE @T TABLE(ID INT IDENTITY(1,1), GROUP_I INT, VALUE INT, C INT,D INT)
INSERT INTO @T SELECT 1,1.1,NULL,NULL
UNION ALL SELECT 1,1.2,NULL,NULL
UNION ALL SELECT 1,1.3,NULL,NULL
UNION ALL SELECT 1,1.4,NULL,NULL
UNION ALL SELECT 2,1.5,NULL,NULL
UNION ALL SELECT 2,1.6,NULL,NULL
UNION ALL SELECT 2,1.7,NULL,NULL
UNION ALL SELECT 2,1.8,NULL,NULL
UNION ALL SELECT 2,1.9,NULL,NULL
--要求:
1:根据GROUP_I 分组,然后根据C 的最大值,提取该记录.
2:如果分组后C 的最大值有相同的记录,则随机提取一条.
--求相关SQL
解决方案 »
- 问一个其他人问了好几年的问题:sql server 8企业版能够安装到win7上吗?
- SQL Server 调用存储过程导入数据问题
- 如何根据一列的值来判断更新哪一列
- WinXP(sp2)下安装SQL Server 2000出现“安装程序配置服务器失败”
- Sql Server 2005问题
- 操作系统不同,能否连接一个数据库,客户端的怎么连进去
- 网站镜像-文件镜像方法介绍-数据库镜像提问?
- 困扰了三天的sql语句问题,求解!
- ACcess转SQL server,这样的问题?...
- 请高手帮忙看看这个sql语句怎么写?
- 求一SQL语句!
- 随便一天,如何得到其上周的周一到上周的周日的日期以及如何得到本周的周一到今天的日期?请各位指教了.
--如果没有NULL,然后根据C 的最大值决定提取的值!
---------
对,要考虑这种情况,
--------
还要考虑: 1:有部分为NULL
2:有一列全相等,多种情况.
where not exists(
Select 1 from @t where GROUP_I=a.GROUP_I and C>a.C
) and ID= (
Select top 1 ID from @t where GROUP_I=a.GROUP_I
and c=a.c order by NewID()
)
INSERT INTO @T SELECT 1,1.1,NULL,NULL
UNION ALL SELECT 1,1.2,NULL,NULL
UNION ALL SELECT 1,1.3,NULL,NULL
UNION ALL SELECT 1,1.4,NULL,NULL
UNION ALL SELECT 2,1.5,NULL,NULL
UNION ALL SELECT 2,1.6,NULL,NULL
UNION ALL SELECT 2,1.7,NULL,NULL
UNION ALL SELECT 2,1.8,NULL,NULL
UNION ALL SELECT 2,1.9,NULL,NULL Select * from @t as a
where not exists(
Select 1 from @t where GROUP_I=a.GROUP_I and IsNULL(C,0)>IsNULL(a.C,0)
) and ID=(
Select top 1 ID from @t where GROUP_I=a.GROUP_I
and IsNULL(C,0)=IsNULL(a.C,0) order by NewID()
)
---你强,你赢了...我再测试下. 马上把所有分给你.