首页 > 解决方案 > 使用 SQL 构建具有动态列标题的电子表格

问题描述

我是 SQL 新手,并且自学了我目前所知道的知识。是否可以设置一组动态列标题?例如下面我在一个数据表(pic704current)的电子表格列AE中,我想要做的是重新创建作为辅助表一部分的FO(Cataloginfo.catalog,基于Cataloginfo.mediaid ='

另外,我需要这样做,因为目录经常更改并且手动输入它们会破坏自动生成此报告的目的。

更新:我已经更新了代码以反映我一直在搞砸的事情。显然,我已经评论了一些我需要稍后再处理的部分,但到目前为止,我仍然无法让它运行。我感谢您的帮助并朝着正确的方向前进!

我正在寻找关于如何做到这一点的想法,或者在 SQL 中是否有可能。任何其他细节或澄清只是让我知道。谢谢!

在此处输入图像描述

SELECT a.ARTICLE
,a.ARTICLENAME
,a.RD
,a.SFC
,a.ITEMMERCH as Merch
,a.Offer
,a.WPFROM

--,CASE WHEN THEN "Yes" else "no" END AS [Unbuilt]
--,Case when b.Brand = 'Seventh Avenue' then b.catalog 

FROM Lago_CID_Master a INNER JOIN CatalogInfo b ON (a.Offer = b.Catalog) AND (a.OfferYear = b.MailYear) JOIN PIC704Current c ON (a.Offer = c.CatID) and (a.OfferYear = c.year)


PIVOT  
(
    Lago_CID_Master.wpfrom(cataloginfo.catalog)  
FOR   
[cataloginfo.catalog]   
    IN (cataloginfo.mediaid('cat catalog'))
 AS q  )


WHERE b.Brand= 'Seventh Avenue' 
--and b.mediaid = ('CAT Catalog') 
and a.year=2020 
and b.seasonid = 'F20'
--ORDER by a.ARTICLE;

标签: sqlsql-server

解决方案


您必须执行以下操作。我没有对此进行测试,因为我没有可使用的数据。添加一些数据来修改查询。

DECLARE @SQL VARCHAR(MAX) = 'SELECT *
                               FROM (SELECT a.packnum,
                                            a.Description,
                                            a.RD,
                                            a.SFC,
                                            a.TwoDigitMerchCode as Merch
                                       FROM PIC704Current a 
                                      INNER JOIN CatalogInfo b 
                                         ON a.CatID = b.Catalog 
                                        AND a.Year = b.MailYear)
                              WHERE b.Brand = ''Seventh Avenue'' 
                                AND b.MediaId = ''cat catalog'' 
                                AND a.[year] = 2020 
                                AND b.seasonid = ''F20'') A
 PIVOT (max([Value]) FOR [mediaid] IN (' + STUFF((SELECT ',' + QUOTENAME(mediaid) FROM (SELECT mediaid FROM Cataloginfo ORDER BY mediaid) A FOR XML PATH('')),1,1,'') + ') ) p'

PRINT @SQL

EXEC(@SQL);

推荐阅读