【问题标题】:How do I achieve a pivot report with a dynamic columns in Crystal Reports for Visual Studio?如何在 Crystal Reports for Visual Studio 中实现带有动态列的数据透视报表?
【发布时间】:2016-06-17 22:08:03
【问题描述】:

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

【问题讨论】:

  • 对不起,我想我明白了你的问题。所以不用担心下面的答案。所以我的理解是你想将列传递给你的 SP,但作为一个参数?
  • 别担心,@mvisser。 问题不在于存储过程,它生成了我需要的正确信息;但是,如何将存储过程的结果放入 Crystal Report for Visual Studio 的报表中?
  • 我知道在 SSRS 中这是不可能的。您必须预先定义列。但你可以隐藏列。
  • 我曾想过,@mvisser,但动态列的名称发生了巨大变化,并且由用户定义。无论如何,谢谢你的回答。

标签: c# sql-server stored-procedures crystal-reports pivot


【解决方案1】:

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

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)

【讨论】:

  • 挖掘动态 Pivot,但我认为 OP 在 SQL 中已经有了动态数据透视,并且正在研究如何将动态结果合并到 Crystal Reports 中
  • 是的,我理解错了。
  • 差点把我的存储过程也贴出来了。
【解决方案2】:

我可以解决这个问题,这就是我为将来的类似问题所做的:

  • 首先。我的存储过程使用带有动态列的枢轴进行查询。我必须从查询中删除数据透视表,因此只选择具有很多行的 3 个相同的列。

结果(没有pivot)是这样的:

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 Reports 进行研究,当您从Crystal Report 创建报表时,您必须选择一个助手。我选择交叉表
  • 最后,在选择我的存储过程(不带数据透视)后,在交叉表助手中,您必须添加 rowscolumnssummary 字段 em> 来自生成我的存储过程的字段。几乎就像在编写数据透视表时一样。

    ____________ 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

这样的结果是一个漂亮的报告,就像一个透视查询。

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多