数据库问题,必给分!求购SQL语句 怎么把表中相同内容的组合成一行 ( 积分: 50 )

  • 主题发起人 主题发起人 zhengjp
  • 开始时间 开始时间
Z

zhengjp

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么把表中相同内容的组合成一行:
如:表
id,name,add,phto
1 zh kk 88
2 dd wq 84
3 zh kk 88
4 uu er 69
得到这样的结果:
id name add phto
1/3 zh kk 88
2 dd wq 84
4 uu er 69
也就是把第一行和第三行的id字段组合了,如果其它字段的内容相同的话,请高手指点!
 
可不可以写出SQL来。。谢谢各位了。。。
 
SELECT A.[ID]+(CASE WHEN B.[ID]!='' THEN '/'+B.[ID] ELSE '' END ),A.[name],A.[add],A.phto FROM TABLE1 AS A
LEFT OUTER JOIN TABLE1 B ON A.[ID]!=B.[ID] AND A.[name]=B.[name] AND A.[add]=B.[add] AND A.phto=B.phto
你试试看,我没有测试环境。
 
不好意思,上面的好像有点问题:
试试这个
SELECT A.[ID]+(CASE WHEN B.[ID]!='' THEN '/'+B.[ID] ELSE '' END ),A.[name],A.[add],A.phto FROM TABLE1 AS A
LEFT OUTER JOIN TABLE1 B ON A.[ID]!=B.[ID] AND A.[name]=B.[name] AND A.[add]=B.[add] AND A.phto=B.phto
LEFT OUTER JOIN TABLE1 C ON A.[ID]!=C.[ID] AND A.[name]!=C.[name] AND A.[add]!=C.[add] AND A.phto!=C.phto
 
不行啊!以上语句得到的结果有大量的重复了!如:
1/3 zh kk 88
3/1 zh kk 88
2 dd wq 842
2 dd wq 84
有没有高手帮了一下,在些谢谢了!决对给分!
 
SELECT C.[ID],C.[name],C.[add],C.phto FROM
(SELECT A.[ID]+(CASE WHEN B.[ID]!='' THEN '/'+B.[ID] ELSE '' END ) AS [ID],A.[name],A.[add],A.phto FROM TABLE1 AS A
LEFT OUTER JOIN TABLE1 B ON A.[ID]<B.[ID] AND A.[name]=B.[name] AND A.[add]=B.[add] AND A.phto=B.phto ) C INNER JOIN TABLE1 ON C.[ID]=FIRST(TABLE1 .[ID]) AND C.[name]=TABLE1.[name] AND C.[add]=TABLE1.[add] AND C.phto=TABLE1.phto
大致思想就是这个样子的,再不行,你可以参照我这个语句进行修改的啊!自己也要动脑子的啊!不能什么都靠别人想的。
呵呵..
 
还是不对哦
 
有没有好的解决方法。。我在等待!必给分~~~
 
期待中……
 
有重复的话就对重复的那个关键字段进行分组一下,如后面加个 group by name
 
用自定義函數應該很簡單 的
 
想知道答案,[:(!]
 
insert into aa values('4','uu','er','69')

SELECT A.[ID]+(CASE WHEN B.[ID]!='' THEN '/'+B.[ID] ELSE '' END ) as id,A.[name],A.[add1],A.phto FROM aa AS A
LEFT OUTER JOIN aa B ON ((A.[name]+A.[add]+A.phto)=(B.[name]+B.[add]+B.phto)) and (A.[ID]<>B.[ID]) and (A.[ID]<B.[ID])
order by a.id

还有第三行没去掉
关注...
 
是啊。怎么没有高手呢。。期待中。。。。一定给你加分!
 
分也太少了吧,本来还想写一写,还是休息去!
 
晚上給你寫個看看
 
CREATE function getresult(@name varchar(2))
returns varchar(5)
as
begin
declare @result varchar(5)
set @result=''
select @result=@result+rtrim(id)+'/' from 表 where name=@name
return @result
end
go
select distinct left(dbo.getresult(name),len(dbo.getresult(name))-1),name,xxx,yyy from 表

------要注意正确定义字符串的长度
 
感谢各位。。。我给你们加分了。suyi3026非常谢你~
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部