如何在 Visual Studio 的 Crystal 报告中实现具有动态列的数据透视报告?

How do I achieve a pivot report with a dynamic columns in Crystal Reports for Visual Studio?

我有一个存储过程 (SQL),它是通过 pivot 查询和 动态列 创建的。一些查询生成 2 个或更多列,这完全取决于参数。如何在 Crystal Reports 中实现 report for Visual Studio ( C# 或 VB) 与此动态列枢轴?

这是可以做到的。下面是一个例子。

DECLARE @ColumnString varchar(200), 
    @sql varchar(1000)


CREATE TABLE #ColumnValue
(
  Value varchar(500)
)

INSERT INTO #ColumnValue (Value)
SELECT DISTINCT '[' + 'value' + Convert(Varchar(20),ROW_NUMBER() Over(Partition by id Order by id )) + ']'
FROM Test

SELECT @ColumnString = COALESCE(@ColumnString + ',', '') + Value
FROM #ColumnValue
Drop table #ColumnValue



SET @sql =
'
SELECT *
FROM
(
SELECT
        id,name,val,''value'' + Convert(Varchar(20),ROW_NUMBER() Over(Partition by id Order by id ))as [values]
FROM Test
) AS P
    PIVOT
(
    MAX(val) FOR [values] IN ('+@ColumnString+')
) AS pv
'

--print @sql 
EXEC (@sql)

我可以解决这个问题,这就是我解决以后类似问题的方法:

  • 首先。我的存储过程使用带有动态列的数据透视表进行查询。我不得不 从我的查询中删除数据透视表 ,所以只有 select 3 个相同的列有很多行。

结果(没有主元)是这样的:

ClaveLMG Calificacion   Resultado
i7p-TP2 P1_1Excelente   100.0
i7p-TP2 P1_2Bueno       0.0
i7p-TP2 P1_3Regular     0.0
i7p-TP2 P1_4Malo        0.0
78-BD1  P1_1Excelente   100.0
78-BD1  P1_2Bueno       0.0
78-BD1  P1_3Regular     0.0
78-BD1  P1_4Malo        0.0
41-TP2  P1_1Excelente   100.0
41-TP2  P1_2Bueno       0.0
41-TP2  P1_3Regular     0.0
41-TP2  P1_4Malo        0.0
42-TC2  P1_1Excelente   100.0
42-TC2  P1_2Bueno       0.0
42-TC2  P1_3Regular     0.0
42-TC2  P1_4Malo        0.0
  • 正在研究如何使用 Crystal 报告,当您从 Crystal 报告创建报告时,您必须 select 一个助手。我 select 交叉表.
  • 最后,在 select 我的存储过程(没有数据透视表)之后,在交叉表助手中,你必须添加 rows, 摘要字段 来自生成我的存储过程的字段。几乎就像编写数据透视表一样。

    ____________ i7p-TP2 78-BD1 41-TP2 42-TC2 P1_1Excelente 100.000000 100.000000 100.000000 100.000000 P1_2Bueno 0.000000 0.000000 0.000000 0.000000 P1_3Regular 0.000000 0.000000 0.000000 0.000000 P1_4Malo 0.000000 0.000000 0.000000 0.000000

结果是一个像数据透视表查询一样漂亮的报告。