ID ModuleID  WhereFieldName  WhereFieldValue  ShowMsg
1  100       bCheck          0                共有 1 条未审核单据 
2  100       bCheck          1                共有 3 条已审核单据  
3  100       WriteTime                        共有 1 条今天新增单据
4  101       bCheck          0                共有 9 条未审核单据 
5  101       bCheck          1                共有 5 条已审核单据         我要显示成这个样子:ModuleID  ShowMsg1               ShowMsg2                ShowMsg3
100       共有 1 条未审核单据    共有 3 条已审核单据     共有 1 条今天新增单据
101       共有 9 条未审核单据    共有 5 条已审核单据

解决方案 »

  1.   

    select ModuleID , 
           max(case when WhereFieldName = 'bCheck' and WhereFieldValue = 0 then ShowMsg else '' end) as ShowMsg1,
           max(case when WhereFieldName = 'bCheck' and WhereFieldValue = 1 then ShowMsg else '' end) as ShowMsg2,
           max(case when WhereFieldName = 'WriteTime' then ShowMsg else '' end) as ShowMsg3
    from tb
    group by ModuleID
      

  2.   

    ..
    固化了能不能根据WhereFieldName的不同和WhereFieldValue的不同  自动增加列数?就象上面的数据:
    bCheck0 bCheck1 WriteTime  (列名无所谓,只要能根据不同的WhereFieldName和WhereFieldValue)自动增加就行
    ...     ...     ...
    ...     ...     ...
      

  3.   

    ModuleID  bCheck等于0的时候      bCheck等于1的时候       WriteTime为NULL的时候
    100       共有 1 条未审核单据    共有 3 条已审核单据     共有 1 条今天新增单据
    101       共有 9 条未审核单据    共有 5 条已审核单据
      

  4.   

    create table T(ID int, ModuleID int, WhereFieldName nvarchar(10), WhereFieldValue int, ShowMsg nvarchar(50))
    insert T select 1,  100,       'bCheck',          0,                '共有 1 条未审核单据' 
    union all select 2,  100,       'bCheck',          1,                '共有 3 条已审核单据'  
    union all select 3,  100,       'WriteTime',       NULL,                 '共有 1 条今天新增单据'
    union all select 4,  101,       'bCheck',          0,                '共有 9 条未审核单据' 
    union all select 5,  101,       'bCheck',          1,                '共有 5 条已审核单据'  declare @sql nvarchar(4000)
    set @sql='select ModuleID,'
    select @sql=@sql+WhereFieldName+'等于'+case when WhereFieldValue is null then 'NULL' else rtrim(WhereFieldValue) end+'的时候=
    max(case when isnull(WhereFieldName, '''')='+quotename(isnull(WhereFieldName, ''), '''') +' and isnull(WhereFieldValue, '''')='+
    quotename(isnull(WhereFieldValue, ''), '''')+' then ShowMsg end),' 
    from T 
    group by WhereFieldName, WhereFieldValue
    select @sql=left(@sql, len(@sql)-1), @sql=@sql+' from T group by ModuleID '
    exec(@sql)--result
    ModuleID    bCheck等于0的时候                                       bCheck等于1的时候                                       WriteTime等于NULL的时候                                 
    ----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- 
    100         共有 1 条未审核单据                                        共有 3 条已审核单据                                        共有 1 条今天新增单据
    101         共有 9 条未审核单据                                        共有 5 条已审核单据                                        NULL