当前位置: 代码迷 >> Sql Server >> 标识相同的多条数据随机取一有关问题
  详细解决方案

标识相同的多条数据随机取一有关问题

热度:54   发布时间:2016-04-24 18:55:23.0
标识相同的多条数据随机取一问题
假设我有一堆数据是这样的

学号 姓名 课程
1    张三 数学
1    张三 语文
1    张三 英语
2    李四 数学
2    李四 历史
2    李四 思政
……

我想要取出 学号 姓名 和任意课程一个课程(要判断不为空),比如
1 张三 数学
2 李四 数学

该如何取呢?
------解决方案--------------------
这是05开始的写法
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-02-07 13:06:14
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([学号] int,[姓名] varchar(4),[课程] varchar(4))
insert [huang]
select 1,'张三','数学' union all
select 1,'张三','语文' union all
select 1,'张三','英语' union all
select 2,'李四','数学' union ALL
select 2,'李四','历史' union all
select 2,'李四','思政'
--------------开始查询--------------------------
SELECT [学号],[姓名],[课程]
FROM (
select * ,ROW_NUMBER()OVER(PARTITION BY [学号] ORDER BY [课程])rid
from [huang])a
WHERE rid=1
----------------结果----------------------------
/* 
学号          姓名   课程
----------- ---- ----
1           张三   数学
2           李四   历史


*/

------解决方案--------------------

select 学号, 姓名 ,max(课程) as 课程 from 表 group by 学号, 姓名

  相关解决方案