我查出来的数据是这个样子的。bigclassname smlclassname
西服类 休闲系列
西服类 正装系列
西服类 短袖系列
T恤类 V领带系列
T恤类 POLO系列
工装类 餐饮娱乐系列
工装类 学生校服系列
外套类 风衣系列
外套系列 大衣系列。我的SQL语句是这个样子的
sql="select bigclassname, smlclassname, receivedate from bigclassbook, smlclassbook where bigclassbook.bigclassindex=smlclassbook.bigclassindex " 最终我想实现的效果是这个样子的:
西服类 休闲系列,正装系列,短袖系列
T恤类 V领系统,POLO系列
工装类 餐饮娱乐系列,学生校服系列
外套类 风衣系列,大衣系列
请问应该如何实现。
西服类 休闲系列
西服类 正装系列
西服类 短袖系列
T恤类 V领带系列
T恤类 POLO系列
工装类 餐饮娱乐系列
工装类 学生校服系列
外套类 风衣系列
外套系列 大衣系列。我的SQL语句是这个样子的
sql="select bigclassname, smlclassname, receivedate from bigclassbook, smlclassbook where bigclassbook.bigclassindex=smlclassbook.bigclassindex " 最终我想实现的效果是这个样子的:
西服类 休闲系列,正装系列,短袖系列
T恤类 V领系统,POLO系列
工装类 餐饮娱乐系列,学生校服系列
外套类 风衣系列,大衣系列
请问应该如何实现。
再用行转列搞定
smlclassname ,
(SELECT COUNT(*) FROM TB WHERE bigclassname=T.bigclassname AND smlclassname <=T.smlclassname)AS NUM
FROM TB T再用行转列
http://topic.csdn.net/u/20090912/14/25d2e1b2-f352-4713-8618-d3433ba27bef.html?99104(经典帖子)
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-14 11:01:07
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([bigclassname] varchar(8),[smlclassname] varchar(12))
insert [TB]
select '西服类','休闲系列' union all
select '西服类','正装系列' union all
select '西服类','短袖系列' union all
select 'T恤类','V领带系列' union all
select 'T恤类','POLO系列' union all
select '工装类','餐饮娱乐系列' union all
select '工装类','学生校服系列' union all
select '外套类','风衣系列' union all
select '外套系列','大衣系列'
--------------开始查询--------------------------
select [bigclassname], [smlclassname]=stuff((select ','+[smlclassname] from tb t where [bigclassname]=tb.[bigclassname] for xml path('')), 1, 1, '')
from tb
group by [bigclassname] ----------------结果----------------------------
/* bigclassname smlclassname
------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T恤类 V领带系列,POLO系列
工装类 餐饮娱乐系列,学生校服系列
外套类 风衣系列
外套系列 大衣系列
西服类 休闲系列,正装系列,短袖系列(5 行受影响)
*/
declare @smlclassname varchar(1000), @bigclassname varchar(100)
update # set @smlclassname = case when bigclassname = @bigclassname then @smlclassname = @smlclassname + ',' + smlclassname else smlclassname end,
smlclassname = @smlclassname, @bigclassname = bigclassname
select bigclassname, max(smlclassname) from # group bigclassname
go
create table [TB]([bigclassname] varchar(8),[smlclassname] varchar(12))
insert [TB]
select '西服类','休闲系列' union all
select '西服类','正装系列' union all
select '西服类','短袖系列' union all
select 'T恤类','V领带系列' union all
select 'T恤类','POLO系列' union all
select '工装类','餐饮娱乐系列' union all
select '工装类','学生校服系列' union all
select '外套类','风衣系列' union all
select '外套系列','大衣系列'create table #(bigclassname varchar(8), smlclassname varchar(100))insert #
select bigclassname, smlclassname from tb order by bigclassnamedeclare @smlclassname varchar(100), @bigclassname varchar(100)
update # set @smlclassname = case when bigclassname = @bigclassname then @smlclassname + ',' + smlclassname else smlclassname end,
smlclassname = @smlclassname, @bigclassname = bigclassnameselect bigclassname, max(smlclassname) as smlclassname from # group by bigclassname
/*
bigclassname smlclassname
------------ ----------------------------------------------------------------------------------------------------
T恤类 V领带系列,POLO系列
工装类 餐饮娱乐系列,学生校服系列
外套类 风衣系列
外套系列 大衣系列
西服类 休闲系列,正装系列,短袖系列
*/
insert [TB]
select '西服类','休闲系列' union all
select '西服类','正装系列' union all
select '西服类','短袖系列' union all
select 'T恤类','V领带系列' union all
select 'T恤类','POLO系列' union all
select '工装类','餐饮娱乐系列' union all
select '工装类','学生校服系列' union all
select '外套类','风衣系列' union all
select '外套系列','大衣系列'
godeclare @sql varchar(8000)
set @sql = 'select bigclassname '
select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then smlclassname else '''' end) [smlclassname' + cast(px as varchar) + ']'
from (select distinct px from (select * ,px = (select count(1) from tb where bigclassname = t.bigclassname and smlclassname < t.smlclassname) + 1 from tb t)m) as a
set @sql = @sql + ' from (select * ,px = (select count(1) from tb where bigclassname = t.bigclassname and smlclassname < t.smlclassname) + 1 from tb t)m group by bigclassname'
exec(@sql)
drop table tb/*
bigclassname smlclassname1 smlclassname2 smlclassname3
------------ ------------- ------------- -------------
T恤类 POLO系列 V领带系列
工装类 餐饮娱乐系列 学生校服系列
外套类 风衣系列
外套系列 大衣系列
西服类 短袖系列 休闲系列 正装系列
*/
create table tb(bigclassname varchar(20),smlclassname varchar(20))
insert tb select
'西服类', '休闲系列' union all select
'西服类', '正装系列' union all select
'西服类', '短袖系列' union all select
'T恤类' , 'V领带系列' union all select
'T恤类' , 'POLO系列' union all select
'工装类' , '餐饮娱乐系列' union all select
'工装类' , '学生校服系列' union all select
'外套类' , '风衣系列' union all select
'外套系列', '大衣系列'
if object_id('f_str')is not null drop function f_str
go
create function f_str(@str varchar(20))
returns varchar(100)
as
begin
declare @s varchar(100)
select @s=isnull(@s+',','')+smlclassname from tb
where bigclassname=@str
return @s
end
go update tb set bigclassname= case when bigclassname='外套系列' then '外套类' else bigclassname end select bigclassname,smlclassname=max(dbo.f_str(bigclassname))
from tb
group by bigclassnamebigclassname smlclassname
-------------------- ----------------------------------------------------------------------------------------------------
T恤类 V领带系列,POLO系列
工装类 餐饮娱乐系列,学生校服系列
外套类 风衣系列,大衣系列
西服类 休闲系列,正装系列,短袖系列(4 行受影响)
drop table tb