我有两个表,一个主表,一个从表,主表有1条数据,从表有两条数据,如:
tableM:姓名,性别
tableD:姓名,经历一
       姓名,经历二
我想要通过查询实现这样的效果
  姓名,经历一,经历二请问怎么样实现,SQL语句怎么写??如果从表的记录数不确定,又该怎么写呢?!!
怎样实现,动态的把从表的记录插到主表的列中呢?!!谢谢了。

解决方案 »

  1.   

    --函數
    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
     姓名     经历
      

  2.   

    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 字节。所以你的返回结果,不能超过这个限制。
      

  3.   

    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 DESCdrop table #ss这是我的一个程序跟你的一样我的是多行多个字段的
      

  4.   

    是想把列转为行吧
    给个例子
    /**//*
     代码  进货单位   药类     让利金额
       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
    */