Tsql 需要对表格进行透视或交叉制表,但不是以传统方式。请
我这里有个小情况。。希望你们能帮我 我应该查询一个有4列的表Tsql 需要对表格进行透视或交叉制表,但不是以传统方式。请,tsql,pivot,crosstab,Tsql,Pivot,Crosstab,我这里有个小情况。。希望你们能帮我 我应该查询一个有4列的表 AccountNo、ResourceNo、ProductNo、CustomerNo 一些accountNo有两个ResourceNo(115和134) 我必须以这样一种方式查询它,即我必须为resourceNo值显示两个动态列,并在accountNo上放置一个“X”,该值包含那些resourceNo。。这样,AccountNo就不会重复。。在这种情况下,旋转没有帮助。请调查一下并帮助我 另见 另见 你需要穷人的支点: 静力柱
AccountNo、ResourceNo、ProductNo、CustomerNo
一些accountNo有两个ResourceNo(115和134) 我必须以这样一种方式查询它,即我必须为
resourceNo
值显示两个动态列,并在accountNo
上放置一个“X”,该值包含那些resourceNo
。。这样,AccountNo
就不会重复。。在这种情况下,旋转没有帮助。请调查一下并帮助我
另见
另见
你需要穷人的支点:
select
AccountNo,
case when sum(case when ResourceNo = 134 then 1 else 0 end) = 0 then '' else 'X' end as Resource_134,
case when sum(case when ResourceNo = 115 then 1 else 0 end) = 0 then '' else 'X' end as Resource_115
from
AccountResource
group by
AccountNo
示例数据:
AccountNo ResourceNo ProductNo CustomerNo
A1 134 P1 C1
A1 134 P2 C1
A1 134 P3 C2
A2 134 P1 C1
A2 115 P1 C4
A2 115 P2 C1
A3 115 P5 C2
示例输出:
AccountNo Resource_134 Resource_115
A1 X
A2 X X
A3 X
动态列
对于动态列,可以执行以下操作:
declare @sql nvarchar(max)
set @sql = ''
select @sql = @sql + ',' + char(13)+char(10)+
'case when sum(case when ResourceNo = ''' + replace(cast(ResourceNo as nvarchar(10)), '''', '''''') + ''' then 1 else 0 end) = 0 then '''' else ''X'' end as "Resource_' + replace(cast(ResourceNo as nvarchar(10)), '"', '""') + '"'
from AccountResource
group by ResourceNo
order by Resourceno
set @sql = 'select AccountNo' + @sql
+ char(13)+char(10)
+ 'From AccountResource '
+ char(13)+char(10)
+ 'group by AccountNo'
+ char(13)+char(10)
+ 'order by AccountNo'
select * from datacheck.dbo.splitmax(@sql, null,null)
exec sp_executesql @sql
你需要穷人的支点:*例子和输出会有所帮助。