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 条已审核单据
6 个解决方案
#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
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)自动增加就行
... ... ...
... ... ...
固化了
能不能根据WhereFieldName的不同和WhereFieldValue的不同 自动增加列数?
就象上面的数据:
bCheck0 bCheck1 WriteTime (列名无所谓,只要能根据不同的WhereFieldName和WhereFieldValue)自动增加就行
... ... ...
... ... ...
#3
ModuleID bCheck等于0的时候 bCheck等于1的时候 WriteTime为NULL的时候
100 共有 1 条未审核单据 共有 3 条已审核单据 共有 1 条今天新增单据
101 共有 9 条未审核单据 共有 5 条已审核单据
100 共有 1 条未审核单据 共有 3 条已审核单据 共有 1 条今天新增单据
101 共有 9 条未审核单据 共有 5 条已审核单据
#4
Mark
#5
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
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
#6
OK TKS~
#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
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)自动增加就行
... ... ...
... ... ...
固化了
能不能根据WhereFieldName的不同和WhereFieldValue的不同 自动增加列数?
就象上面的数据:
bCheck0 bCheck1 WriteTime (列名无所谓,只要能根据不同的WhereFieldName和WhereFieldValue)自动增加就行
... ... ...
... ... ...
#3
ModuleID bCheck等于0的时候 bCheck等于1的时候 WriteTime为NULL的时候
100 共有 1 条未审核单据 共有 3 条已审核单据 共有 1 条今天新增单据
101 共有 9 条未审核单据 共有 5 条已审核单据
100 共有 1 条未审核单据 共有 3 条已审核单据 共有 1 条今天新增单据
101 共有 9 条未审核单据 共有 5 条已审核单据
#4
Mark
#5
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
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
#6
OK TKS~