日期:2014-05-18  浏览次数:20604 次

从视图中查询数据并分类
问题是这样的:从一个视图中查出以下数据
SCode Code Grade
5602 00001162 A++
5614 00001162 A++
7010 00001214 A++
7039 00001214 A++
659 00001312 A++
5302 00001312 A++
2754 00002288 A++
821 00002288 A++
2761 00002289 A++
2025 00002289 A++
2119 00002290 A++
1704 00002290 A++
4053 00002291 A++
4066 00002291 A++
4098 00002293 A++
2303 00002293 A++
339 00002294 A++
340 00002294 A++
2502 00002297 A++
759 00002297 A++
1687 00002308 A++
1686 00002308 A++
5080 00002317 A++
5090 00002317 A++
5019 00002318 A++
5005 00002319 A++
4058 00002319 A++
5000 00002320 A++
2008 00002320 A++
5197 00002323 A++
5480 00002323 A++
2646 00002324 A++
6563 00002324 A++
5750 00002329 A++
5755 00002329 A++
5634 00002332 A++
5640 00002332 A++
5650 00002333 A++
5686 00002338 A++
5691 00002338 A++
5723 00002340 A++
5770 00002340 A++
5730 00002341 A++
5743 00002341 A++
5727 00002342 A++
5729 00002342 A++
5677 00002344 A++
5673 00002344 A++
206 00002350 A++
2473 00002351 A++
2472 00002351 A++
3657 00002356 A++
3658 00002356 A++
3164 00002358 A++
6533 00002358 A++
5237 00002360 A++
5210 00002373 A++
5209 00002373 A++
5201 00002374 A++
2264 00002374 A++
2425 00002376 A++
1505 00002376 A++
6535 00002384 A++
971 00002394 A++
2089 00002396 A++
2090 00002396 A++
3092 00002397 A++
5378 00002398 A++
7025 00002398 A++
901 00002398 A++
5398 00002400 A++
5414 00002400 A++
992 00002406 A++
2978 00002412 A++
2979 00002412 A++
197 00002418 A++
5425 00002423 A++
5429 00002423 A++
1833 00002426 A++
1574 00002426 A++
5647 00002428 A++
5641 00002428 A++
5799 00002434 A++
5608 00002440 A++
5607 00002440 A++
5804 00002444 A++
5490 00002444 A++
5643 00002448 A++
5658 00002448 A++
6580 00002450 A++
5502 00002450 A++
5540 00002450 A++
422 00002458 A++
3254 00002458 A++
86 00002461 A++
85 00002461 A++
2235 00002466 A++
2237 00002466 A++
5285 00002469 A++
5291 00002469 A++
5172 00002476 A++
5166 00002476 A++
1044 00002476 A++
7018 00002606 A++
7017 00002606 A++
959 00002759 A++
3084 00002759 A++
SCode是唯一的,把SCode按50个分为一组,要求每一组中的每个SCode的Code不同,并把剩下的不能分的分为一组(一个Code可能对应几个不同的SCode).例如有200个数据,如果能分成两组SCode及其Code不同的,可能分成50,48两组,那就把其余的102分为一组.
很麻烦的问题,哪个高手能帮一下忙,或提供一个思路?先谢过了!


------解决方案--------------------
--有多少个不同的px,就有多少组.

select t.* , px = (select count(*) from tb where code = t.code and scode < t.scode) + 1 from tb t
------解决方案--------------------
SQL code
--> 测试数据: #
if object_id('tempdb.dbo.#') is not null drop table #
create table # (SCode int,Code varchar(8),Grade varchar(3))
insert into #
select 5602,'00001162','A++' union all
select 5614,'00001162','A++' union all
select 7010,'00001214','A++' union all
select 7039,'00001214','A++' union all
select 659,'00001312','A++' union all
select 5302,'00001312','A++' union all
select 2754,'00002288','A++' union all
select 821,'00002288','A++' union all
select 2761,'00002289','A++' union all
select 2025,'00002289','A++' union all
select 2119,'00002290','A++' union all
select 1704,'00002290','A++' union all
select 4053,'00002291','A++' union all
select 4066,'00002291','A++' union all
select 4098,'00002293','A++' union all
select 2303,'00002293','A++' union all
select 339,'00002294','A++' union all
select 340,'00002294','A++' union all
select 2502,'00002297','A++' union all
select 759,'00002297','A++' union all
select 1687,'00002308','A++' union all
select 1686,'00002308','A++'