动态列的Crystal报表

时间:2013-07-20 08:26:46

标签: sql sql-server crystal-reports datatable

我做一个动态的pivot sql查询来得到像这样的结果, enter image description here

为此,我的查询在下面给出,

    DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(AssortmentSize) 
                    from tbl_Assortment_Qty WHERE Head_Id=325
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

    set @query='SELECT                                                                      Description,AssortmentType, '+@cols+',ISNULL (size_unit_price,0) UnitPrice from 
             (
                SELECT DISTINCT H.Description,AssortmentType,AssortmentSize,AssortmentQty,B.size_unit_price FROM dbo.tbl_Assortment_Qty Q
                INNER JOIN 
dbo.tbl_Fabric_Order_Head H
 ON H.Head_ID=Q.Head_ID
 LEFT OUTER JOIN
 dbo.Budget_Accessories_Qty B
 ON B.head_Id=Q.Head_Id
 AND B.accessories=Q.AssortmentType

 WHERE Q.head_id=325
 ) x
            pivot 
            (
                SUM(AssortmentQty)
                for AssortmentSize in (' + @cols + ')
            ) p '

execute(@query)

现在我想将结果数据表直接打印到Crystal报表中。我希望它原样,标题名称完好无损。现在我完全陷入了困境。我不能定义在水晶报表中修复的列,因为它们是动态的。尺寸c(L,M,S,XL)可能是另一个,我不是水晶报告专家。我需要的最简单的答案是,如何将DATATABLE直接打印到Crystal报表中,而不定义其列字段?

2 个答案:

答案 0 :(得分:0)

据我所知,没有首先为您的值指定某种占位符,就无法直接将DataTable打印到报表中。作为解决方案,您可以使用本文中使用的技术http://www.codeproject.com/Articles/20670/Dynamic-Crystal-Report-with-C

答案 1 :(得分:0)

经过猛烈的搜索,我终于决定在我身边使用水晶报告我想要的东西是不可能的。所以我宁愿使用交叉表来简化查询,即不使用PIVOT。现在我的结果集看起来像, enter image description here