表一 FNO    FScrq        FCcsj  FBcfs   FTpz
1      2013-04-27   08:00   1       C10
2      2013-05-01   12:00   2       C10表二
FNO    FYlmc  FSysl 
1       水泥     5
1       砂子     3
2       水泥    5
2       石子     2要得到如下结果
标号  方量  水泥   砂子   石子
C10   3    10    3    2
说明: 材料名称不是固定的 查询时间范围根据需求选择

解决方案 »

  1.   

    CREATE TABLE table1 
      ( 
         fno   VARCHAR(5), 
         fscrq VARCHAR(20), 
         fccsj VARCHAR(20), 
         fbcfs VARCHAR(5), 
         ftpz  VARCHAR(20) 
      ) CREATE TABLE table2 
      ( 
         fno   VARCHAR(5), 
         fyimc VARCHAR(20), 
         fsysl INT 
      ) INSERT INTO table1 
    SELECT '1', 
           '2013-04-27', 
           '08:00', 
           '1', 
           'c10' 
    UNION ALL 
    SELECT '2', 
           '2013-05-01', 
           '12:00', 
           '2', 
           'c10' insert into table2
    select '1','水泥',5
    union all
    select '1','砂子',3
    union all
    select '2','水泥',5
    union all
    select '2','石子',2IF Object_id('tempdb..#dual')IS NOT NULL 
      DROP TABLE #dual SELECT ftpz, 
           Sum(fsysl) AS num, 
           fyimc 
    INTO   #dual 
    FROM   table1 a 
           INNER JOIN table2 b 
                   ON a.fno = b.fno 
    GROUP  BY ftpz, 
              fyimc IF Object_id('tempdb..#temp')IS NOT NULL 
      DROP TABLE #temp IF Object_id('tempdb..##dual')IS NOT NULL 
      DROP TABLE ##dual DECLARE @sql0 VARCHAR(8000) SELECT id=IDENTITY(int, 0, 1), 
           groupid=0, 
           值= ',max(case fyimc when ''' + fyimc 
              + ''' then num else 0 end ) [' + fyimc + ']' 
    INTO   #temp 
    FROM  (SELECT DISTINCT fyimc 
           FROM   #dual) AS a UPDATE #temp 
    SET    groupid = id / 100SELECT @sql0 = '' 
    SELECT @sql0 = @sql0 +值 from #temp 
    WHERE  groupid = 0 EXEC('select * into ##dual  from (select ftpz,count(*) as fangliang ' +@sql0+ 
    ' from #dual group by ftpz )a') SELECT * 
    FROM   ##dual