数据库DB中有一个表 TB1(A,G,H,I,J)    由于在程序中需要用到一个动态的表TB2,由代码根据需要的数据生成如下表TB2(列标题数目不一定),TB2不和表TB1在同一个数据库中,前者在数据库DB中,后者是由代码生成的,问题是如何能联合 TB1 ,TB2 进行高效SQL查询,新手学习,高手请帮忙!
          DataTable dt = new DataTable();
            dt.Columns.Add("A");//0
            dt.Columns.Add("B");//1
            dt.Columns.Add("D");//2
            dt.Columns.Add("E");//3
            dt.Columns.Add("F");//4
            DataRow dr = dt.NewRow();
           dr[0]="1";
           dr[1]="1";
           dr[2]="1";
           dr[3]="1";
           dt.Rows.Add(dr);
            return dt;

解决方案 »

  1.   

    一定要用SQL的话需要先把TB2传到数据库里建成临时表,然后在进行表联接查询。
      

  2.   

    楼主是不是需要对查询出来的数据进行行转列?之前做报表查询时也遇到过类似问题,比如查商品每月销售额,数据库查出来的结构是:
    商品   月份    金额
    SP1   2011-1  500
    SP1   2011-2  1100
    SP2   2011-2  1200
    需要转换成:
    商品 2011-1 2011-2 
    SP1   500    1100
    SP2    0     1200如果是这种需求的话,我之前的做法是用sql进行 行转列,由于这个列是动态变的,所以需要在程序中动态拼凑sql语句,至于sql怎么行转列,我这里就不多说了,网上一搜一大摞
      

  3.   

    这个貌似不难吧,当然你如果单纯的用SQL语句来实行的话就比较难搞,用存储过程吧,临时表随便你怎么用,要多少有多少,用完了删除一下就好了,那样就可以进行联合查询,找了一段我这里的SQL给你参考参考:
    IF @TYPE='0'
    BEGIN
    SELECT DISTINCT FLOTNO INTO #LOT FROM MPMR A 
    WHERE NOT EXISTS(SELECT * FROM BP_LOT B WHERE A.FLOTNO=B.IILOT)
    ORDER BY 1
    INSERT INTO BP_LOT (IILOT, IBU, FUPDATE) SELECT FLOTNO, @IBU, '2' FROM #LOT WHERE FLOTNO<>' '
    SELECT IILOT, IBU FROM BP_LOT WHERE FUPDATE='0'
    UNION SELECT FLOTNO, @IBU FROM #LOT WHERE FLOTNO<>' '
    ORDER BY IILOT
    DROP TABLE #LOT
    RETURN
    END
      

  4.   

    先两个table 合并,再用以下方法查询。
    dt.select("A=1");