sql查询

橄榄丝 2009-09-03 11:14:53
...全文
164 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-09-04
  • 打赏
  • 举报
回复
把资料整理一下再发出来.
microsofttyc 2009-09-04
  • 打赏
  • 举报
回复
学习,太强大了
橄榄丝 2009-09-04
  • 打赏
  • 举报
回复
谢谢!
dawugui 2009-09-04
  • 打赏
  • 举报
回复
根据我的思路自己改吧.自己把需要的条件和可能出现的情况逐一加上,没法帮你完成具体的需求.
橄榄丝 2009-09-04
  • 打赏
  • 举报
回复
我有疑问:插入IR_URLTITLE列这一块和插入IR_SRCNAME
如果这两块语句结合起来就是我想要的了:查询结果中除了要将IR_URLTITLE列没有中杠"-"的数据加上"-"一级新加一列外,不对其他数据进行修改,插入IR_SRCNAME这一块语句执行结果就对IR_SRCNAME列经行了修改(把不符合的数据删了)
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------------------------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-1994
2 b GB 14723-2008 GB 14723-1994 GB 14723-1994
3 a GB 14883.4-1994

然后插入IR_URLTITLE列这一块的执行结果没有对数据经行修改,但是新列中的数据错了,新列中显示的应该是IR_SRCNAME列中符合条件的数据,而不是显示IR_URLTITLE的数据
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-2002
2 b GB 14723-2008 GB 14723-1994;GB 12109-1994 GB 14723-2008
3 a GB 14883.4-1994

也就是说我要的是:查询结果中除了要将IR_URLTITLE列没有中杠"-"的数据加上"-"一级新加一列外,不对其他数据进行修改,新列中显示的应该是IR_SRCNAME列中符合条件的数据,而不是显示IR_URLTITLE的数据
dawugui 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 gaozhi0 的回复:]
引用 19 楼 dawugui 的回复:
SQL codecreatetable tb(IR_SIDint,IR_VRESERVED2nvarchar(20),IR_URLTITLEnvarchar(20), IR_SRCNAMEnvarchar(50))insertinto tbvalues(1,'a','GB 14907-2002','GB 14907-1994')insertinto tbvalues(2,'b','GB 14723¡­


差不多了,IR_SRCNAME的其他两种情况还没解决:IR_SRCNAME列为空和数据不符合的时候,新列应该是空,而不是完全不显示不符合条件的这一行。
[/Quote]
create table tb(IR_SID int,IR_VRESERVED2 nvarchar(20),IR_URLTITLE nvarchar(20), IR_SRCNAME nvarchar(50))
insert into tb values(1,'a','GB 14907-2002','GB 14907-1994')
insert into tb values(2,'b','GB 14723-2008','GB 14723-1994;GB 12109-1994')
insert into tb values(3,'a','GB 14883.4-1994','')
go

--插入IR_URLTITLE列
select * , col = '' from tb where IR_SID not in (
select IR_SID from tb where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select IR_SID from tb where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0
)
union all
select * , col = IR_URLTITLE from tb where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select * , col = IR_URLTITLE from tb where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0
order by ir_sid
/*
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-2002
2 b GB 14723-2008 GB 14723-1994;GB 12109-1994 GB 14723-2008
3 a GB 14883.4-1994

(所影响的行数为 3 行)
*/

--插入IR_SRCNAME
select * , col = '' from tb where IR_SID not in (
select IR_SID from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select IR_SID from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0
)
union all
select * , col = IR_SRCNAME from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select * , col = IR_SRCNAME from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0
order by ir_sid
/*
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------------------------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-1994
2 b GB 14723-2008 GB 14723-1994 GB 14723-1994
3 a GB 14883.4-1994

(所影响的行数为 3 行)
*/

drop table tb



橄榄丝 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 dawugui 的回复:]
SQL codecreatetable tb(IR_SIDint,IR_VRESERVED2nvarchar(20),IR_URLTITLEnvarchar(20), IR_SRCNAMEnvarchar(50))insertinto tbvalues(1,'a','GB 14907-2002','GB 14907-1994')insertinto tbvalues(2,'b','GB 14723¡­
[/Quote]

差不多了,IR_SRCNAME的其他两种情况还没解决:IR_SRCNAME列为空和数据不符合的时候,新列应该是空,而不是完全不显示不符合条件的这一行。
dawugui 2009-09-04
  • 打赏
  • 举报
回复
create table tb(IR_SID int,IR_VRESERVED2 nvarchar(20),IR_URLTITLE nvarchar(20), IR_SRCNAME nvarchar(50))
insert into tb values(1,'a','GB 14907-2002','GB 14907-1994')
insert into tb values(2,'b','GB 14723-2008','GB 14723-1994;GB 12109-1994')
insert into tb values(3,'a','GB 14883.4-1994','')
go

--插入IR_URLTITLE列
select * , col = IR_URLTITLE from tb where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select * , col = IR_URLTITLE from tb where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0

/*
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-2002
2 b GB 14723-2008 GB 14723-1994;GB 12109-1994 GB 14723-2008

(所影响的行数为 2 行)
*/

--IR_SRCNAME
select * , col = IR_SRCNAME from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select * , col = IR_SRCNAME from
(
select b.IR_SID,b.IR_VRESERVED2,b.IR_URLTITLE,IR_SRCNAME=substring(b.IR_SRCNAME, number, charindex(';', b.IR_SRCNAME + ';', number) - number)
from master..spt_values a,tb b
where type='p' and substring(';' + b.IR_SRCNAME, number,1) = ';'
) t
where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0
/*
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------------------------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-1994
2 b GB 14723-2008 GB 14723-1994 GB 14723-1994

(所影响的行数为 2 行)
*/

drop table tb


--小F-- 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dawugui 的回复:]
SQL codecreatetable tb(IR_SIDint,IR_VRESERVED2nvarchar(20),IR_URLTITLEnvarchar(20), IR_SRCNAMEnvarchar(50))insertinto tbvalues(1,'a','GB 14907-2002','GB 14907-1994')insertinto tbvalues(2,'b','GB 14723¡­
[/Quote]

学习 不能不说太强大了
dawugui 2009-09-04
  • 打赏
  • 举报
回复
create table tb(IR_SID int,IR_VRESERVED2 nvarchar(20),IR_URLTITLE nvarchar(20), IR_SRCNAME nvarchar(50))
insert into tb values(1,'a','GB 14907-2002','GB 14907-1994')
insert into tb values(2,'b','GB 14723-2008','GB 14723-1994;GB 12109-1994')
insert into tb values(3,'a','GB 14883.4-1994','')
go

--插入IR_URLTITLE列
select * , col = IR_URLTITLE from tb where (charindex('-',IR_URLTITLE) > 0 and charindex('.',IR_URLTITLE) = 0) and charindex(substring(IR_URLTITLE,1,charindex('-',IR_URLTITLE)-1),IR_SRCNAME) > 0
union all
select * , col = IR_URLTITLE from tb where (charindex('.',IR_URLTITLE) > 0) and charindex(substring(IR_URLTITLE,1,charindex('.',IR_URLTITLE)-1),IR_SRCNAME) > 0

drop table tb

/*
IR_SID IR_VRESERVED2 IR_URLTITLE IR_SRCNAME col
----------- -------------------- -------------------- -------------------------------------------------- --------------------
1 a GB 14907-2002 GB 14907-1994 GB 14907-2002
2 b GB 14723-2008 GB 14723-1994;GB 12109-1994 GB 14723-2008

(所影响的行数为 2 行)
*/
橄榄丝 2009-09-04
  • 打赏
  • 举报
回复
表结构:
urlcontent
(IR_SID int,
IR_VRESERVED2 nvarchar(1024),
IR_URLTITLE,nvarchar(500),
IR_SRCNAME,nvarchar(100)
)
现在的数据:


具体需求:
1.IR_URLTITLE(这一列的数据通常是这样的格式:GB 14963-2000,也可能会出现没有年号的情况,如GB 14963,如果查到这样的数据,在其后加上-,即GB 14963-)。
2.IR_SRCNAME,这一列中的数据可能为空,可能只有一个数据(这里的一个是指GB 14963-2000这样的整体),可能有多个,如果有多个就是用的分号“;”分隔开。
3.通过字符串截取将IR_URLTITLE列的数据中的数字(如:GB 14963-2000中的14963)与IR_SRCNAME列中的数据的每一个数字(比如这一列有两个数据,即“GB 14963-2001 ; ZB 17433-1987 ;”那么就要将这两个数据中的数字(14963和17433)分别和IR_URLTITLE中的数字对比,如果相同,则将符合的数据(在这里就是GB 14963-2001)插入到新列中(查询的时候新建的列),如果不符合就保留空)
wolfmvp 2009-09-04
  • 打赏
  • 举报
回复
第二句话的主语不知道去那了,看不明白…
SQL77 2009-09-04
  • 打赏
  • 举报
回复
华夏小卒 2009-09-04
  • 打赏
  • 举报
回复
xupeihuagudulei 2009-09-04
  • 打赏
  • 举报
回复
截图都没弄好
fanzhouqi 2009-09-04
  • 打赏
  • 举报
回复
还是很晕
lihan6415151528 2009-09-04
  • 打赏
  • 举报
回复
还是看不太懂,贴出来你想要的结果吧
htl258_Tony 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gaozhi0 的回复:]
查询IR_URLTITLE(这一列的数据可能会出现没有年号的情况,如GB 14963,如果查到这样的数据,在其后加上-,即GB 14963-)中的红色方框部分与IR_SRCNAME中红色方框部分相同的数据,然后将IR_SRCNAME中的符合上述要求的数值(整个,如GB 14963-2002)添加到新列中,如果没有符合的就留空
[/Quote]
数据跟表头都贴上来
橄榄丝 2009-09-03
  • 打赏
  • 举报
回复
查询IR_URLTITLE(这一列的数据可能会出现没有年号的情况,如GB 14963,如果查到这样的数据,在其后加上-,即GB 14963-)中的红色方框部分与IR_SRCNAME中红色方框部分相同的数据,然后将IR_SRCNAME中的符合上述要求的数值(整个,如GB 14963-2002)添加到新列中,如果没有符合的就留空
linguojin11 2009-09-03
  • 打赏
  • 举报
回复
不劣迹说什么
加载更多回复(5)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧