复杂SQL问题,求救!!!

kkkws02 2006-07-21 11:08:06
我有两个表,一个主表,一个从表,主表有1条数据,从表有两条数据,如:
tableM:姓名,性别
tableD:姓名,经历一
姓名,经历二
我想要通过查询实现这样的效果
姓名,经历一,经历二

请问怎么样实现,SQL语句怎么写??如果从表的记录数不确定,又该怎么写呢?!!
怎样实现,动态的把从表的记录插到主表的列中呢?!!谢谢了。
...全文
202 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
erhan 2006-07-22
  • 打赏
  • 举报
回复
简单啊
Yang_ 2006-07-22
  • 打赏
  • 举报
回复
晕,那不是要改主表的表结构?
CACACACACA 2006-07-22
  • 打赏
  • 举报
回复
是想把列转为行吧
给个例子
/**//*
代码 进货单位 药类 让利金额
01 广州 西药 10
01 广州 中成药 9
01 广州 医材 8
01 广州 中草药 7
02 西安 西药 2
02 西安 医材 6
03 深圳 西药 5
*/
select 代码,进货单位,
"西药"=(select 让利金额 from abc where 药类 ='西药' and 代码=t1.代码),
"中成药"=(select 让利金额 from abc where 药类 ='中成药' and 代码=t1.代码),
"医材 "=(select 让利金额 from abc where 药类 ='医材' and 代码=t1.代码),
"中草药"=(select 让利金额 from abc where 药类 ='中草药' and 代码=t1.代码),
"合计"=(select sum(药类) from abc where 代码=t1.代码 group by 代码)
from abc t1 group by 代码,进货单位
/**//*
代码 进货单位 西药 中成药 医材 中草药 合计
01 广州 10 9 8 7 34
02 西安 2 0 6 0 8
*/
pylijian 2006-07-22
  • 打赏
  • 举报
回复
declare @i int
select x.*,qd1.vcJYJLBH as sjbh1,qd2.vcJYJLBH as sjbh2,qd3.vcJYJLBH as sjbh3,
[fCYMJ1]='10000',[fCYMJ3]='10000',[fCYMJ2]='10000',z.vcGCBW,z.dtCXRQ
into #ss
from tbTQDPDBGXB X
left join tbTQDPDBGZB z on z.vcZBDJBH=x.vcZBDJBH
left join tbHNTCCJCJL qd1 on qd1.vczbdjbh=vcXNQDZBBH
left join tbHNTCCJCJL qd2 on qd2.vczbdjbh=vcXNQDZBBH1
left join tbHNTCCJCJL qd3 on qd3.vczbdjbh=vcXNQDZBBH2
where x.vczbdjbh=:vczbdjbh
select @i=count(*) from #ss
if @i>6 select @i=@i%6
while 6-@i>0
begin

insert into #ss(vcZBDJBH,vcXBDJBH,fCYMJ1,fCYMJ2,fCYMJ3) values('1','1',' ',' ',' ')
select @i=@i+1
end
select * from #ss order by vczbdjbh DESC

drop table #ss

这是我的一个程序跟你的一样我的是多行多个字段的
erhan 2006-07-22
  • 打赏
  • 举报
回复
CREATE PROCEDURE test
@cardname varchar(50)

AS
/*声明一个查询表的游标*/
Declare @tempCursor Cursor
Set @tempCursor = Cursor For
SELECT title
FROM cardsms
WHERE cardname=@cardname
For Read Only
/*打开表游标*/
Open @tempCursor
Declare @sqltext varchar(1000)
SET @sqltext = "SELECT '" + @cardname + "'"

Declare @title varchar(50)
WHILE (0=0) BEGIN
/*取一条投注记录*/
Fetch Next
From @tempCursor
INTO @title
IF (@@Fetch_Status<>0) Break /*到达表尾*/

SET @sqltext = @sqltext + ",'" + @title + "'"
END
/*关闭并释放投注表游标*/
Close @tempCursor
Deallocate @tempCursor

exec(@sqltext)
GO
请注意,sql server一个表最多1024列,每行最多可以存储 8,060 字节。所以你的返回结果,不能超过这个限制。
lixianxiang 2006-07-22
  • 打赏
  • 举报
回复
學習!
SmallMaker 2006-07-21
  • 打赏
  • 举报
回复
支持1楼的方法
hsmserver 2006-07-21
  • 打赏
  • 举报
回复
--函數
create function dbo.fn_bb(@a varchar(10))
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s=''
select @s=@s+[经历]+',' from 表2 where 姓名=@a
return (left(@s,len(@s)-1))
end


select 姓名,经历=dbo.fn_bb(姓名) from 表1 group by 姓名 order by 2
姓名 经历
kkkws02 2006-07-21
  • 打赏
  • 举报
回复
上面的方法把从表的行合并了,我不需要合并,只需要把行变为主表的列就可以了,能帮我再想想办法么???谢谢楼上的兄弟了!!!

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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