表的结构及内容
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 有分
up
列转行问题。
用游标是可以的。
复杂查询把,第一列可以实现
然后第二列用sum函数,条件是表里面的值为distinct第一列!
具体语句可以实验的吗!呵呵
不会,只能up
up 有分?
select distinct t_code,sum(t_name) from tablename
where t_code=(
select distinct t_code from tablename
)
bigery(bigery)不行吧,t_name 应该是整形才可以这样写呀!
建个临时表试试!
楼上的不行,
不会,哈哈,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
最后字符串连接
up
用两个循环算吧
我也来顶.
group by tcode 就可以呀
up
每次把数据库总体浏览,统计T_Code 里相同的数据的个数,再把对应的T_Name 道入变量StrA$中
再输出便可.我做过的.
不会!
up
我也顶
up
以上这个结果可以做到
但是在查询分析器里是无法显示的
这个结果存在
但是只能打印输出
如果你需要显示在屏幕上
那只能用程序实现
步骤如下
你定义两个变量
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;
同意:haoguozhong(郝国忠)
up!
ding
晕,顶。。。
顶。。。
select distinct(T_name) from tablename
先取出不同的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;
up
我只能给你一个建议:我建议你首先将T_code选出来放到数组中或是一个堆栈或是一个队列。
用两层循环,外层循环是数组中或是一个堆栈或是一个队列中的一个值,中间用adoquery控件
用select 语句选出在用一个循环,把T_name累加起来,程序到此结束。
也可以用
select distinct t_code,sum(t_name) from tablename
where t_code=(select distinct t_code from tablename)
up难题
haoguozhong(郝国忠) 对的
就是游标,循环
或者借助临时表
高手的办法:
--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
我的存储过程哪个缺陷已经去掉了