我有一个存储过程(SQL),使用动态列进行数据透视查询。一些查询生成2列或更多列,它们都取决于参数。如何使用此动态列数据透视在 Visual Studio (C#或VB)的 Crystal Reports 中实现报告?
答案 0 :(得分:0)
这可以做到。以下是一个例子。
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)
答案 1 :(得分:0)
我可以解决这个问题,这就是我为未来类似问题做的事情:
结果(没有透视)是这样的:
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
最后,在选择我的存储过程(没有数据透视)后,在交叉表助手中,您必须添加行,列和摘要来自生成我的存储过程的字段的字段。几乎就像编码枢轴一样。
____________ 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
这是一个美丽的报告,如透视查询。