表1 Fno     fl    tbh   rwdbh 
1      10    C20   2013-0001
2      12    C30   2013-0002
表2
Fno    Fpan   clmc    clyl
1       1      砂子     100
1       1      石子      80
2       1      砂子      120
2       1     外加剂      10要得到如下结果
     C20    10      砂子  100  石子 80   外加剂 0 

解决方案 »

  1.   

    这是你的FNo只对应了2行,如果3行、更多行,怎么显示啊?也排在后面?
      

  2.   

    我的意思是为什么fno为2的没有数据,是不是不用查?
      

  3.   

    那个是带条件的 可以带可以不带 比如 where pan=1 
      

  4.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-04-07 22:23:53
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
    -- Jun 17 2011 00:57:23 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[表1]
    if object_id('[表1]') is not null drop table [表1]
    go 
    create table [表1]([Fno] int,[fl] int,[tbh] varchar(3),[rwdbh] varchar(9))
    insert [表1]
    select 1,10,'C20','2013-0001' union all
    select 2,12,'C30','2013-0002'
    if object_id('[表2]') is not null drop table [表2]
    go 
    create table [表2]([Fno] int,[Fpan] int,[clmc] varchar(6),[clyl] int)
    insert [表2]
    select 1,1,'砂子',100 union all
    select 1,1,'石子',80 union all
    select 2,1,'砂子',120 union all
    select 2,1,'外加剂',10--------------开始查询--------------------------SELECT  tbh,fl,MAX(CASE WHEN clmc='砂子' THEN clmc ELSE NULL END )clmc,
    MAX(CASE WHEN clmc='砂子' THEN clyl ELSE 0 END ) clyl,
    MAX(CASE WHEN clmc='石子' THEN clmc ELSE NULL END )clmc,
    MAX(CASE WHEN clmc='石子' THEN clyl ELSE 0 END ) clyl,
    MAX(CASE WHEN clmc='外加剂' THEN clmc ELSE NULL END )clmc,
    MAX(CASE WHEN clmc='外加剂' THEN clyl ELSE 0 END ) clyl
    FROM    [表1] a
            INNER JOIN 表2 b ON a.fno = b.fno
    GROUP BY tbh,fl
    ----------------结果----------------------------
    /* 
    tbh  fl          clmc   clyl        clmc   clyl        clmc   clyl
    ---- ----------- ------ ----------- ------ ----------- ------ -----------
    C20  10          砂子     100         石子     80          NULL   0
    C30  12          砂子     120         NULL   0           外加剂    10
    */
      

  5.   

    select a.tbh,a.fl,b.* from table1 a left join table2 on a.Fno=b.Fno where a.Fno=2
      

  6.   

    修正一下----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-04-07 22:23:53
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
    -- Jun 17 2011 00:57:23 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[表1]
    if object_id('[表1]') is not null drop table [表1]
    go 
    create table [表1]([Fno] int,[fl] int,[tbh] varchar(3),[rwdbh] varchar(9))
    insert [表1]
    select 1,10,'C20','2013-0001' union all
    select 2,12,'C30','2013-0002'
    if object_id('[表2]') is not null drop table [表2]
    go 
    create table [表2]([Fno] int,[Fpan] int,[clmc] varchar(6),[clyl] int)
    insert [表2]
    select 1,1,'砂子',100 union all
    select 1,1,'石子',80 union all
    select 2,1,'砂子',120 union all
    select 2,1,'外加剂',10--------------开始查询--------------------------SELECT  tbh,fl,MAX(CASE WHEN clmc='砂子' THEN clmc ELSE '砂子' END )clmc,
    MAX(CASE WHEN clmc='砂子' THEN clyl ELSE 0 END ) clyl,
    MAX(CASE WHEN clmc='石子' THEN clmc ELSE '石子' END )clmc,
    MAX(CASE WHEN clmc='石子' THEN clyl ELSE 0 END ) clyl,
    MAX(CASE WHEN clmc='外加剂' THEN clmc ELSE '外加剂' END )clmc,
    MAX(CASE WHEN clmc='外加剂' THEN clyl ELSE 0 END ) clyl
    FROM    [表1] a
            INNER JOIN 表2 b ON a.fno = b.fno
    GROUP BY tbh,fl
    ----------------结果----------------------------
    /* 
    tbh  fl          clmc   clyl        clmc   clyl        clmc   clyl
    ---- ----------- ------ ----------- ------ ----------- ------ -----------
    C20  10          砂子     100         石子     80          外加剂    0
    C30  12          砂子     120         石子     0           外加剂    10
    */
      

  7.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-04-07 22:23:53
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86) 
    -- Jun 17 2011 00:57:23 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[表1]
    if object_id('[表1]') is not null drop table [表1]
    go 
    create table [表1]([Fno] int,[fl] int,[tbh] varchar(3),[rwdbh] varchar(9))
    insert [表1]
    select 1,10,'C20','2013-0001' union all
    select 2,12,'C30','2013-0002'
    if object_id('[表2]') is not null drop table [表2]
    go 
    create table [表2]([Fno] int,[Fpan] int,[clmc] varchar(6),[clyl] int)
    insert [表2]
    select 1,1,'砂子',100 union all
    select 1,1,'石子',80 union all
    select 2,1,'砂子',120 union all
    select 2,1,'外加剂',10--------------开始查询--------------------------
    DECLARE @s NVARCHAR(MAX)
    SET @s = ''
    SELECT  @s = @s + ',' + QUOTENAME('clmc') + '=max(case when [clmc]='
            + QUOTENAME(clmc, '''') + ' then [clmc] else clmc end)' + ','
            + QUOTENAME('clyl') + '=max(case when [clmc]=' + QUOTENAME(clmc, '''')
            + ' then [clyl] else 0 end)'
    FROM    [表1] a
            INNER JOIN 表2 b ON a.fno = b.fno
    GROUP BY clmc,clyl--tbh ,
            --fl
    EXEC('select tbh,fl'+@s+' from [表1] a
    INNER JOIN 表2 b ON a.fno = b.fno group by tbh,fl')
    ----------------结果----------------------------
    /* 
    tbh  fl          clmc   clyl        clmc   clyl        clmc   clyl        clmc   clyl
    ---- ----------- ------ ----------- ------ ----------- ------ ----------- ------ -----------
    C20  10          石子     100         石子     100         石子     80          石子     0
    C30  12          外加剂    120         外加剂    120         外加剂    0           外加剂    10
    */