在一天的大部分时间里,我一直在敲击键盘。我需要帮助!
我有一个可能属于或可能不属于组织的客户列表。这些组织按组织类型分组。我试图在Excel中为每个组删除报告。每组组织都分配有随机数量的组织。在Excel工作表中,我需要在列中列出组中的每个组织,然后将客户端转储到相应列中带有Y或N的每一行。
我的源表如下所示:
GROUP ORGID CLIENT
1 1 5
1 2 4
1 1 4
1 3 5
Excel表格应如下所示:
ORGNAME1 ORGNAME2 ORGNAME3 CLIENT
Y Y N 4
Y N Y 5
Excel报告由C#Windows服务生成。我可以在为每个组执行之前构建查询,或者更喜欢以SQL方式执行我可以作为存储过程运行的查询,并只提供组织组ID。
编辑:如果我忘记提及它......每组将有一个Excel文档。每组可以包含2-10个组织,因此它必须是动态的。
有推荐的方法吗?
答案 0 :(得分:1)
您可以使用SQL pivot参见下文
declare @orgscolumns nvarchar(max)
declare @orgs nvarchar(max)
declare @query nvarchar(max)
select @orgscolumns = STUFF((SELECT distinct ',' + QUOTENAME(orgname)
FROM orgs
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
select @orgs = STUFF((SELECT distinct ',case when ' + QUOTENAME(orgname)
+ ' is null then ''N'' Else ''Y'' END ' + QUOTENAME(orgname)
FROM orgs
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
select @query = 'select client, ' + @orgs + ' from
( select t.*, orgname from t inner join orgs o on t.orgid = o.id) v
pivot ( max(orgid) for orgname in (' + @orgscolumns + ')) p'
exec(@query)