【问题标题】:Subquery in pivot table数据透视表中的子查询
【发布时间】:2015-11-11 21:41:54
【问题描述】:

我正在使用动态数据透视查询来生成报告:

DECLARE @Columns VARCHAR(MAX)
DECLARE @Columns2 VARCHAR(MAX) 

SET @Columns = ''
SET @Columns2 = ''

SELECT 
    @Columns = @Columns + (QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ',') 
FROM 
    efoxsfc.dbo.FTX_FA_Calender 
WHERE 
    1=1 
    AND CAST(dates AS DATETIME) >= DATEADD(mm, -5 ,DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)) 
    AND dates <= DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)

SET @Columns = LEFT(@Columns, LEN(@Columns) - 1)

SELECT  
    @Columns2 = @Columns2 + 'ISNULL(' +(QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ',0)AS'+(QUOTENAME(RTRIM(LTRIM(cast(datename(month, [dates]) as char(15))))+',' + RTRIM(LTRIM(cast(year([dates]) as char(20))))) + ',') )
FROM 
    efoxsfc.dbo.FTX_FA_Calender 
WHERE 
    1=1 
    AND CAST(dates AS DATETIME) >= DATEADD(mm, -5 ,DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)) 
    AND dates <= DATEADD(m, DATEDIFF(m, 0,GETDATE()), 0)

SET @Columns2 = LEFT(@Columns2, LEN(@Columns2) - 1)

DECLARE @SQL NVARCHAR(MAX) 
SET @SQL = ''

SET @SQL = 'WITH BaseData AS
                (
                     select 
                        vendor_code,
                        RTRIM(LTRIM(cast(datename(month, [CLOSED_DATE]) as char(15))))+'','' + RTRIM(LTRIM(cast(year([CLOSED_DATE]) as char(20)))) as [CLOSED_DATE],
                        count(vendor_code) as [No. of Case] 
                   from #teamp t WITH (NOLOCK)
                      where 
                       [CLOSED_DATE] is not null
                  group by 
                       vendor_code, CLOSED_DATE
                )   
                SELECT  vendor_code,' + @Columns2 + 'FROM BaseData
                PIVOT
                (
                    sum([No. of Case])
                    FOR CLOSED_DATE IN (' +  @Columns + ')
                ) AS PivotTable'

--Print @SQL
EXECUTE sp_executesql @SQL 

现在我想在我的报告中添加供应商名称和供应商代码。供应商名称来自不同的表格

 SELECT VendorName 
 FROM VENDOR_REQUIREMENT  
 WHERE vendorcode = 'ACEA'

请告诉我我必须在哪里使用我的选择来获取供应商名称!

请查找示例数据

提前致谢

【问题讨论】:

    标签: sql sql-server stored-procedures report pivot


    【解决方案1】:

    只需加入 BaseData cte 中的 vendor_requirement 表,然后在需要的地方选择供应商名称。您还需要按执行 count() 的新字段进行分组

    SET @SQL = 'WITH BaseData AS
                    (
                       select 
                            t.vendor_code,
                            vr.vendorname,
                            RTRIM(LTRIM(cast(datename(month, [CLOSED_DATE]) as char(15))))+'','' + RTRIM(LTRIM(cast(year([CLOSED_DATE]) as char(20)))) as [CLOSED_DATE],
                            count(t.vendor_code) as [No. of Case] 
                       from #teamp t WITH (NOLOCK)
                       join (select distinct vendorcode, vendorname from  vendor_requirement) vr on t.vendor_code = vr.vendorcode
                       where 
                           [CLOSED_DATE] is not null
                       group by 
                           t.vendor_code, vr.vendorname, CLOSED_DATE
                    )   
                    SELECT  vendor_code,vendorname,' + @Columns2 + 'FROM BaseData
                    PIVOT
                    (
                        sum([No. of Case])
                        FOR CLOSED_DATE IN (' + @Columns + ')
                    ) AS PivotTable'
                    --Print @SQL
    EXECUTE sp_executesql @SQL 
    

    【讨论】:

    • 它给了我供应商名称,但案例数量错误。因为加入
    • 除了 vendor_requirement 之外,您是否还有另一个表,每个供应商代码都有一个供应商名称?每个供应商的供应商代码是否唯一?
    • 供应商代码对于每个供应商都是唯一的。但两个表都有针对特定供应商的大量不同数据
    • 请找样本数据
    • 啊,只要选择不同的,如果那是你必须使用的......请参阅更新
    【解决方案2】:

    不确定#team 表的来源。加入该表应该可以。

    来自#teamp t WITH (NOLOCK) INNER JOIN VENDOR_REQUIREMENT V ON T.vendor_code=V.vendor_code

    【讨论】:

    • 内部连接后它给了我错误的“sum([No. of Case])”
    猜你喜欢
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2013-10-18
    • 2018-11-11
    • 2019-07-22
    • 2015-06-24
    相关资源
    最近更新 更多