表的结构及内容T_Code T_name
-----------------------------
1 A
1 B
1 C
2 A
2 E
2 F
3 D
3 E
------------------------------求Sql语句,能根据上表内容得到如下结果
T_Code T_Name
------------------------------
1 ABC
2 AEF
3 DE
------------------------------up 有分
-----------------------------
1 A
1 B
1 C
2 A
2 E
2 F
3 D
3 E
------------------------------求Sql语句,能根据上表内容得到如下结果
T_Code T_Name
------------------------------
1 ABC
2 AEF
3 DE
------------------------------up 有分
然后第二列用sum函数,条件是表里面的值为distinct第一列!
具体语句可以实验的吗!呵呵
where t_code=(
select distinct t_code from tablename
)
建个临时表试试!
不会,哈哈,up
思路:
select T_Code from tablename group by T_code 得到数据集:
1
2
3
select T_Name from tablename where T_Code=:n // n为1、2、3
得到
A A D
B E E
C F最后字符串连接
再输出便可.我做过的.
但是在查询分析器里是无法显示的
这个结果存在
但是只能打印输出
如果你需要显示在屏幕上
那只能用程序实现
步骤如下
你定义两个变量
DECLARE @code int DECLARE @name varchar(500)
set @name = '';
select T_code,case when @code = T_code then @name + t_name
when @code <> T_code then set @code = T_code
end
where ...
group by ....以上代码未调试过,你自己写个程序试试看吧,
其它方法也有,比如用do until object.eof object.next ... loop 循环遍历,用case when then end 语句比较赋值等等
以上语句用法可以查阅联机帮助
希望可以帮到你
但是单用SQL返回数据记也许会比较困难!
可以新建一个表,字符串连接
haoguozhong(郝国忠) 的方法就可以!
Create FUNCTION GETName(@yourname NVARCHAR(40))
RETURNS NVARCHAR(800)
AS
BEGIN
DECLARE @str NVARCHAR(800)
SET @str='' SELECT @str = @str + T_name
FROM 表 WHERE T_Code=@yourname RETURN @str
END调用
Adoquery1.close;
Adoquery1.Text:='select T_Code,getname(T_name) from 表 group by T_Code order by T_Code '
Open;
先取出不同的T_name, 然后
for i:=0 to query1.recordcount-1 do
begin
if not query1.eof then
begin
tname:=query1.fieldbyname("T_name").asstring;
sql:='select T_code from tablename '+''''+tname+'''';
query2.sql.clear;
query2.sql.add(sql);
query2.sql.open;
string1:='';
for j:=0 to query2.recordcount-1 do
begin
string1:=string1+query2.fieldbyname("T_code").asstring;
query2.movenext;
end;
sql2:='update tablename set tcode='+''''+string1+''''+' where t_name='+''''+tanme+'''';
query3.sql.clear;
query3.sql.add(sql2);
query3.execsql;
end;
end;
用两层循环,外层循环是数组中或是一个堆栈或是一个队列中的一个值,中间用adoquery控件
用select 语句选出在用一个循环,把T_name累加起来,程序到此结束。
select distinct t_code,sum(t_name) from tablename
where t_code=(select distinct t_code from tablename)
或者借助临时表
create table table1(T_Code char(2),T_name char(5))
insert into table1 values('1','A')
insert into table1 values('1','B')
insert into table1 values('1','C')
insert into table1 values('2','A')
insert into table1 values('2','E')
insert into table1 values('2','F')
insert into table1 values('3','D')
insert into table1 values('3','E')
insert into table1 values('3','f')
--我的存储过程
create procedure strsum
as
begin
declare @scode char(2),@sname char(5)--这两个参数用来保存插入结果集的值
declare @code char(2), @name char(2)--这两个参数用来保存油标值
declare temp_sor cursor for select * from table1 order by T_Code
open temp_sor
fetch next from temp_sor into @scode,@sname--取第一条记录值,放入@scode,@sname
while @@FETCH_STATUS=0
begin
fetch next from temp_sor into @code,@name--从第二条开始循环
if @@FETCH_STATUS=0
begin
if @code=@scode--如果相同,例如第二条还是1,就把@name加上去
set @sname=rtrim(ltrim(@sname))+rtrim(ltrim(@name))
else--如果不同,例如,取到2了,将@scode,@sname保存的结果插入临时表,且重新给@scode,@sname赋值
begin
if object_id('tempdb..#temp') is not null
insert into #temp values(@scode,@sname)
else
select @scode as T_Code,@sname as T_name into #temp
set @scode=@code--重新给@scode,@sname赋值
set @sname=@name
end
end
end
insert into #temp values(@scode,@sname)
close temp_sor
deallocate temp_sor
print @name
end
select * from #temp
go
--执行存储过程
exec strsum
结果集体如下:
2 AEF
3 DEf
1 ABC
--1.创建一个合并的函数
create function fmerg(@id char(1))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+ltrim(rtrim(T_name)) from table1 where T_code=@id
--set @str=right(@str,len(@str)-1)
return(@str)
End
go--调用自定义函数得到结果
select distinct T_code,dbo.fmerg(T_code) from table1详细见:
http://expert.csdn.net/Expert/topic/2299/2299635.xml?temp=.5711939
我的存储过程哪个缺陷已经去掉了