Reporte en crystal...

16/03/2006 - 16:39 por Daniel G. Samborski | Informe spam
Reporte en crystal...
Hola, necesito armar un informe en CrystalReport.

Este es el store porcedure que utilizo.

select marcas.nommarca as marca, Descripción, colores.NomColor as Color,
Talle, Cantidad
from productos
inner join colores on colores.codcolor=productos.codcolor
inner join marcas on marcas.codmarca=productos.codmarca
order by descripción

Y esto es el resultado:
Marca Descripción Color Talle Cantidad
NIKE Prueba 01 Amarillo 1 5
NIKE Prueba 01 Amarillo 1.5 4
NIKE Prueba 01 Azul 2 8
NIKE Prueba 01 Blanco 2 5

Lo que necesito es presentar el informe de la siguiente manera.

Marca Descripcion Color Talles: 1 1.5 2 2.5 3 3.5 Etc...
NIKE Prueba 01 Amarillo 5 4
NIKE Prueba 01 Azul 8
NIKE Prueba 01 Blanco 5


Me gustaria me ayuden ha hacer esto, si es posible obtener los resultados de
esta forma directamente en SQL o la forma de hacerlo con el CrystalReport.


Daniel.

Preguntas similare

Leer las respuestas

#1 Pablo
16/03/2006 - 19:10 | Informe spam
hola daniel. en mi experiencia con crystal realmente me parece desfavorable
el hecho de que solo se puedan hacer tablas cruzadas en el encabezado del
reporte y el groupfooter, ademas de lo poco practico del diseño.
te paso dos stored procedures para tablas cruzadas

espero que te sirvan


/*procedimiento auxiliar para crear uns tabla con datos cruzados*/
CREATE PROC dSp_CrossTab
@table AS sysname, -- Table to crosstab
@onrows AS nvarchar(128), -- Grouping key values (on rows)
@onrowsalias AS sysname = NULL, -- Alias for grouping column
@oncols AS nvarchar(128), -- Destination columns (on columns)
@sumcol AS sysname = NULL -- Data cells
AS

DECLARE
@sql AS varchar(8000),
@NEWLINE AS char(1)

SET @NEWLINE = CHAR(10)

SET @sql 'SELECT' + @NEWLINE +
' ' + @onrows +
CASE
WHEN @onrowsalias IS NOT NULL THEN ' AS ' + @onrowsalias
ELSE ''
END

CREATE TABLE #keys(keyvalue nvarchar(100) NOT NULL PRIMARY KEY)

DECLARE @keyssql AS varchar(1000)
SET @keyssql 'INSERT INTO #keys ' +
'SELECT DISTINCT CAST(' + @oncols + ' AS nvarchar(100)) ' +
'FROM ' + @table

EXEC (@keyssql)

DECLARE @key AS nvarchar(100)
SELECT @key = MIN(keyvalue) FROM #keys

WHILE @key IS NOT NULL
BEGIN
SET @sql = @sql + ',' + @NEWLINE +
' SUM(CASE CAST(' + @oncols +
' AS nvarchar(100))' + @NEWLINE +
' WHEN N''' + @key +
''' THEN ' + CASE
WHEN @sumcol IS NULL THEN '1'
ELSE @sumcol
END + @NEWLINE +
' ELSE 0' + @NEWLINE +
' END) AS c' + REPLACE(@key,' ','_')

SELECT @key = MIN(keyvalue) FROM #keys
WHERE keyvalue > @key
END

SET @sql = @sql + @NEWLINE +
'FROM ' + @table + @NEWLINE +
'GROUP BY ' + @onrows + @NEWLINE +
'ORDER BY ' + @onrows

PRINT @sql + @NEWLINE -- For debug
EXEC (@sql)

GO



/*procedimiento auxiliar para obtener una tabla con datos cruzados*/
CREATE PROCEDURE dSp_CrossTabConSelect
@select varchar(8000),
@sumfunc varchar(100),
@pivot varchar(100),
@table varchar(100)
AS

DECLARE @sql varchar(8000), @delim varchar(1)
SET NOCOUNT ON
SET ANSI_WARNINGS OFF

EXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table + ' WHERE
1=2')
EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table +
' WHERE '
+ @pivot + ' Is Not Null')

SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc) +1 , 0, ' END)' )
PRINT @sumfunc +char(10) -- For debug
SELECT @delimÊSE Sign( CharIndex('char', data_type)+CharIndex('date',
data_type) )
WHEN 0 THEN '' ELSE '''' END
FROM tempdb.information_schema.columns
WHERE table_name='##pivot' AND column_name='pivot'

SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + ''' = ' +
stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' (CASE ' + @pivot + ' WHEN
'
+ @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', ' FROM
##pivot

DROP TABLE ##pivot

SELECT @sql=left(@sql, len(@sql)-1)
SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql
+ ' ')

PRINT @select +char(10) -- For debug
EXEC (@select)
SET ANSI_WARNINGS ON

GO


Pablo...

"Daniel G. Samborski" escribió en
el mensaje news:eHPGc$
Reporte en crystal...
Hola, necesito armar un informe en CrystalReport.

Este es el store porcedure que utilizo.

select marcas.nommarca as marca, Descripción, colores.NomColor as Color,
Talle, Cantidad
from productos
inner join colores on colores.codcolor=productos.codcolor
inner join marcas on marcas.codmarca=productos.codmarca
order by descripción

Y esto es el resultado:
Marca Descripción Color Talle Cantidad
NIKE Prueba 01 Amarillo 1 5
NIKE Prueba 01 Amarillo 1.5 4
NIKE Prueba 01 Azul 2 8
NIKE Prueba 01 Blanco 2 5

Lo que necesito es presentar el informe de la siguiente manera.

Marca Descripcion Color Talles: 1 1.5 2 2.5 3 3.5 Etc...
NIKE Prueba 01 Amarillo 5 4
NIKE Prueba 01 Azul 8
NIKE Prueba 01 Blanco 5


Me gustaria me ayuden ha hacer esto, si es posible obtener los resultados


de
esta forma directamente en SQL o la forma de hacerlo con el CrystalReport.


Daniel.


Respuesta Responder a este mensaje
#2 Daniel G. Samborski
16/03/2006 - 19:17 | Informe spam
Gracias, las revisare a ver si me resultan utiles.

Daniel

"Pablo" escribió en el mensaje
news:Oa0%
hola daniel. en mi experiencia con crystal realmente me parece
desfavorable
el hecho de que solo se puedan hacer tablas cruzadas en el encabezado del
reporte y el groupfooter, ademas de lo poco practico del diseño.
te paso dos stored procedures para tablas cruzadas

espero que te sirvan


/*procedimiento auxiliar para crear uns tabla con datos cruzados*/
CREATE PROC dSp_CrossTab
@table AS sysname, -- Table to crosstab
@onrows AS nvarchar(128), -- Grouping key values (on rows)
@onrowsalias AS sysname = NULL, -- Alias for grouping column
@oncols AS nvarchar(128), -- Destination columns (on columns)
@sumcol AS sysname = NULL -- Data cells
AS

DECLARE
@sql AS varchar(8000),
@NEWLINE AS char(1)

SET @NEWLINE = CHAR(10)

SET @sql > 'SELECT' + @NEWLINE +
' ' + @onrows +
CASE
WHEN @onrowsalias IS NOT NULL THEN ' AS ' + @onrowsalias
ELSE ''
END

CREATE TABLE #keys(keyvalue nvarchar(100) NOT NULL PRIMARY KEY)

DECLARE @keyssql AS varchar(1000)
SET @keyssql > 'INSERT INTO #keys ' +
'SELECT DISTINCT CAST(' + @oncols + ' AS nvarchar(100)) ' +
'FROM ' + @table

EXEC (@keyssql)

DECLARE @key AS nvarchar(100)
SELECT @key = MIN(keyvalue) FROM #keys

WHILE @key IS NOT NULL
BEGIN
SET @sql = @sql + ',' + @NEWLINE +
' SUM(CASE CAST(' + @oncols +
' AS nvarchar(100))' + @NEWLINE +
' WHEN N''' + @key +
''' THEN ' + CASE
WHEN @sumcol IS NULL THEN '1'
ELSE @sumcol
END + @NEWLINE +
' ELSE 0' + @NEWLINE +
' END) AS c' + REPLACE(@key,' ','_')

SELECT @key = MIN(keyvalue) FROM #keys
WHERE keyvalue > @key
END

SET @sql = @sql + @NEWLINE +
'FROM ' + @table + @NEWLINE +
'GROUP BY ' + @onrows + @NEWLINE +
'ORDER BY ' + @onrows

PRINT @sql + @NEWLINE -- For debug
EXEC (@sql)

GO



/*procedimiento auxiliar para obtener una tabla con datos cruzados*/
CREATE PROCEDURE dSp_CrossTabConSelect
@select varchar(8000),
@sumfunc varchar(100),
@pivot varchar(100),
@table varchar(100)
AS

DECLARE @sql varchar(8000), @delim varchar(1)
SET NOCOUNT ON
SET ANSI_WARNINGS OFF

EXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table + '
WHERE
1=2')
EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table
+
' WHERE '
+ @pivot + ' Is Not Null')

SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc) +1 , 0, ' END)' )
PRINT @sumfunc +char(10) -- For debug
SELECT @delimÊSE Sign( CharIndex('char', data_type)+CharIndex('date',
data_type) )
WHEN 0 THEN '' ELSE '''' END
FROM tempdb.information_schema.columns
WHERE table_name='##pivot' AND column_name='pivot'

SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + ''' = ' +
stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' (CASE ' + @pivot + '
WHEN
'
+ @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', ' FROM
##pivot

DROP TABLE ##pivot

SELECT @sql=left(@sql, len(@sql)-1)
SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' +
@sql
+ ' ')

PRINT @select +char(10) -- For debug
EXEC (@select)
SET ANSI_WARNINGS ON

GO


Pablo...

"Daniel G. Samborski" escribió en
el mensaje news:eHPGc$
Reporte en crystal...
Hola, necesito armar un informe en CrystalReport.

Este es el store porcedure que utilizo.

select marcas.nommarca as marca, Descripción, colores.NomColor as Color,
Talle, Cantidad
from productos
inner join colores on colores.codcolor=productos.codcolor
inner join marcas on marcas.codmarca=productos.codmarca
order by descripción

Y esto es el resultado:
Marca Descripción Color Talle Cantidad
NIKE Prueba 01 Amarillo 1 5
NIKE Prueba 01 Amarillo 1.5 4
NIKE Prueba 01 Azul 2 8
NIKE Prueba 01 Blanco 2 5

Lo que necesito es presentar el informe de la siguiente manera.

Marca Descripcion Color Talles: 1 1.5 2 2.5 3 3.5 Etc...
NIKE Prueba 01 Amarillo 5 4
NIKE Prueba 01 Azul 8
NIKE Prueba 01 Blanco 5


Me gustaria me ayuden ha hacer esto, si es posible obtener los resultados


de
esta forma directamente en SQL o la forma de hacerlo con el
CrystalReport.


Daniel.






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida