sql server学习
来源:互联网 发布:学java买什么书知乎 编辑:程序博客网 时间:2024/05/22 02:14
--整理一下如下:如果是分解为各个字段
create table ta(code varchar(10),name varchar(10))
insert into ta values('01', 'A公司')
insert into ta values('02', 'B公司')
create table tb(code varchar(10),linkname varchar(10))
insert into tb values('01', 'aaa')
insert into tb values('01', 'bbb')
insert into tb values('01', 'ccc')
insert into tb values('02', 'ddd')
insert into tb values('02', 'eee')
go
--静态SQL,指一个公司的值最多为3个。
select m.code , m.name ,
max(case n.px when 1 then n.linkname else '' end) linkname1,
max(case n.px when 2 then n.linkname else '' end) linkname2,
max(case n.px when 3 then n.linkname else '' end) linkname3
from ta m ,
(
select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t
) n
where m.code = n.code
group by m.code , m.name
/*
code name linkname1 linkname2 linkname3
---------- ---------- ---------- ---------- ----------
01 A公司 aaa bbb ccc
02 B公司 ddd eee
(2 行受影响)
*/
--动态SQL,指一个公司的值个数不定。
declare @sql varchar(8000)
set @sql = 'select m.code , m.name'
select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then linkname else '' '' end) [linkname' + cast(px as varchar) + ']'
from (select distinct px from (select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t) o) as a
set @sql = @sql + ' from ta m , (select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t) n where m.code = n.code group by m.code , m.name'
exec(@sql)
/*code name linkname1 linkname2 linkname3---------- ---------- ---------- ---------- ----------01 A公司 aaa bbb ccc02 B公司 ddd eee(2 行受影响)*/
drop table ta,tb
create table ta(code varchar(10),name varchar(10))
insert into ta values('01', 'A公司')
insert into ta values('02', 'B公司')
create table tb(code varchar(10),linkname varchar(10))
insert into tb values('01', 'aaa')
insert into tb values('01', 'bbb')
insert into tb values('01', 'ccc')
insert into tb values('02', 'ddd')
insert into tb values('02', 'eee')
go
--静态SQL,指一个公司的值最多为3个。
select m.code , m.name ,
max(case n.px when 1 then n.linkname else '' end) linkname1,
max(case n.px when 2 then n.linkname else '' end) linkname2,
max(case n.px when 3 then n.linkname else '' end) linkname3
from ta m ,
(
select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t
) n
where m.code = n.code
group by m.code , m.name
/*
code name linkname1 linkname2 linkname3
---------- ---------- ---------- ---------- ----------
01 A公司 aaa bbb ccc
02 B公司 ddd eee
(2 行受影响)
*/
--动态SQL,指一个公司的值个数不定。
declare @sql varchar(8000)
set @sql = 'select m.code , m.name'
select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then linkname else '' '' end) [linkname' + cast(px as varchar) + ']'
from (select distinct px from (select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t) o) as a
set @sql = @sql + ' from ta m , (select px = (select count(1) from tb where code = t.code and linkname < t.linkname) + 1 , * from tb t) n where m.code = n.code group by m.code , m.name'
exec(@sql)
/*code name linkname1 linkname2 linkname3---------- ---------- ---------- ---------- ----------01 A公司 aaa bbb ccc02 B公司 ddd eee(2 行受影响)*/
drop table ta,tb
- SQL code
- --如果是合为一个串,以下为sql server 2005的写法.create table ta(code varchar(10),name varchar(10))insert into ta values('01', 'A公司') insert into ta values('02', 'B公司') create table tb(code varchar(10),linkname varchar(10))insert into tb values('01', 'aaa') insert into tb values('01', 'bbb') insert into tb values('01', 'ccc') insert into tb values('02', 'ddd') insert into tb values('02', 'eee')goselect m.* , n.linkname from ta m,( SELECT * FROM(SELECT DISTINCT code FROM tb)A OUTER APPLY(SELECT [linkname]= STUFF(REPLACE(REPLACE(( SELECT linkname FROM tb N WHERE code = A.code FOR XML AUTO), '<N linkname="', ' '), '"/>', ''), 1, 1, ''))N) nwhere m.code = n.code drop table ta,tb/*code name linkname---------- ---------- --------------01 A公司 aaa bbb ccc02 B公司 ddd eee(2 行受影响)*/--如果是合为一个串,以下是SQL SERVER 2000的写法,需要一个函数来实现.create table ta(code varchar(10),name varchar(10))insert into ta values('01', 'A公司') insert into ta values('02', 'B公司') create table tb(code varchar(10),linkname varchar(10))insert into tb values('01', 'aaa') insert into tb values('01', 'bbb') insert into tb values('01', 'ccc') insert into tb values('02', 'ddd') insert into tb values('02', 'eee')gocreate function f_hb(@code varchar(10))returns varchar(8000)asbegin declare @str varchar(8000) set @str = '' select @str = @str + ' ' + cast(linkname as varchar) from tb where code = @code set @str = right(@str , len(@str) - 1) return(@str)Endgo--调用自定义函数得到结果:select m.* , n.linkname from ta m,( select distinct code ,dbo.f_hb(code) as linkname from tb) nwhere m.code = n.codedrop table ta,tbdrop function f_hb/*code name linkname---------- ---------- -------------01 A公司 aaa bbb ccc02 B公司 ddd eee(2 行受影响)*/
- 学习sql server笔记。
- sql server学习
- SQL Server 数据类型学习
- SQL SERVER学习日志
- SQL Server学习笔记
- 学习SQL Server 2005
- sql SERVER学习质料
- SQL SERVER学习
- Sql Server学习
- SQL Server Trigger学习
- Sql server 函数学习
- sql server分区学习
- 学习MS SQL Server
- sql server 学习资源
- SQL server基础理论学习
- SQL Server 全面学习
- SQL server 2005学习
- sql server 学习笔记
- WEB开发网 - 技术就是实力!
- 富有哲理的签名
- .net下基于winpcap实现的网络分析程序(一)
- ERROR: org.xml.sax.SAXParseException: The reference to entity must
- [UML]对新语义建模
- sql server学习
- javascript 实现多张图片轮流展示效果
- 创建索引视图时提示架构绑定无效,名称必须由两部分构成
- 【转帖】备份blog必备(back up your blog!)
- QT中窗口刷新事件的学习总结(http://wuguangchao.spaces.live.com/blog/cns!6F7400464FEEC42A!144.entry)
- qinls 的一片关于30岁程序员的出路
- PfxEditCtrl代码风格
- 如何当鼠标和键盘长时间不动的时候让程序自动退出?
- 汽车人为什么打不过霸天虎