假设我有一堆数据是这样的
学号 姓名 课程
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 学号, 姓名