求 SQL 语句解决方法
求 SQL 语句
各位大侠好!麻烦给看一下以下语句改如何写
姓名 年龄 工作 小时
张三 33 裁纸 2
李四 22 打浆 3
张三 33 开机 1
张三 33 卷纸 2
李四 22 开机 1
得到以下结果:
姓名 年龄 工作 小时
张三 33 裁纸|2|开机|1|卷纸|2 2
李四 22 打浆|3|开机|1 3
就是把相同姓名的人的工作合到一起,并且后面跟上小时。
谢谢大家了!
------解决方案--------------------
------解决方案--------------------
2000和非2000的都有了
各位大侠好!麻烦给看一下以下语句改如何写
姓名 年龄 工作 小时
张三 33 裁纸 2
李四 22 打浆 3
张三 33 开机 1
张三 33 卷纸 2
李四 22 开机 1
得到以下结果:
姓名 年龄 工作 小时
张三 33 裁纸|2|开机|1|卷纸|2 2
李四 22 打浆|3|开机|1 3
就是把相同姓名的人的工作合到一起,并且后面跟上小时。
谢谢大家了!
------解决方案--------------------
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-03-06 13:41:08
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([姓名] nvarchar(4),[年龄] int,[工作] nvarchar(4),[小时] int)
insert [huang]
select N'张三',33,N'裁纸',2 union all
select N'李四',22,N'打浆',3 union all
select N'张三',33,N'开机',1 union all
select N'张三',33,N'卷纸',2 union all
select N'李四',22,N'开机',1
--------------生成数据--------------------------
select a.[姓名],A.[年龄],
stuff((select '
------解决方案--------------------
'+[工作]+'
------解决方案--------------------
'+CAST([小时] AS NVARCHAR) from [huang] b
where b.[姓名]=a.[姓名] and b.[年龄]=a.[年龄]
for xml path('')),1,1,'') N'工作小时'
from [huang] a
group by a.[姓名],A.[年龄]
----------------结果----------------------------
/*
姓名 年龄 工作小时
---- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
张三 33 裁纸
------解决方案--------------------
2
------解决方案--------------------
开机
------解决方案--------------------
1
------解决方案--------------------
卷纸
------解决方案--------------------
2
李四 22 打浆
------解决方案--------------------
3
------解决方案--------------------
开机
------解决方案--------------------
1
*/
------解决方案--------------------
2000和非2000的都有了
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-03-06 13:41:08
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([姓名] nvarchar(4),[年龄] int,[工作] nvarchar(4),[小时] int)
insert [huang]
select N'张三',33,N'裁纸',2 union all
select N'李四',22,N'打浆',3 union all
select N'张三',33,N'开机',1 union all
select N'张三',33,N'卷纸',2 union all
select N'李四',22,N'开机',1
--------------生成数据--------------------------
--2005
select a.[姓名],A.[年龄],
stuff((select '
------解决方案--------------------
'+[工作]+'
------解决方案--------------------
'+CAST([小时] AS NVARCHAR) from [huang] b
where b.[姓名]=a.[姓名] and b.[年龄]=a.[年龄]
for xml path('')),1,1,'') N'工作小时'
from [huang] a
group by a.[姓名],A.[年龄]
--2000
go
if object_id('F_Str') is not null
drop function F_Str
go
create function F_Str(@Col1 NVARCHAR(30))