buenas a todos

25/05/2004 - 17:19 por Jorge Luis Medrano | Informe spam
Nuevamente molestando al grupo con una duda y un problema bastante extraño:

Tengo una consulta en la cual tengo cinco productos, de los cuales debo
mostrar en cinco columnas, ordenados al país de destino.

Mi problema es que estos datos cambian constantemente y no son lo mismo, por
lo que necesito cambiar el nombre de la columna en cada momento, Cómo podría
hacer eso????? he pensado trabajar en las tablas del sistema, pero no me
parece muy buena idea.

Muchas gracias y buen día.

Preguntas similare

Leer las respuestas

#6 Liliana Sorrentino
26/05/2004 - 18:26 | Informe spam
Mi amigo alemán... Ahora sí va el ejemplo...


create table Libros
(id_libro smallint,
titulo char(20),
autor char(20))
insert Libros values (1, 'Tit1', 'yo')
insert Libros values (2, 'Tit2', 'tu')

create table categorias
(idCategoria smallint,
nombre char(20))
insert categorias values (1, 'asp')
insert categorias values (2, 'ado')
insert categorias values (3, 'xml')

create table librosCategorias
(idCategoria smallint,
idLibro smallint)
insert librosCategorias values (1, 1)
insert librosCategorias values (2, 1)
insert librosCategorias values (1, 2)
insert librosCategorias values (3, 2)


CREATE Procedure proc_Query_Pivot_1
@Base_Data_SQL varchar(2000), -- Table to use as recordsource to build
final crosstab qry
@Row_Headings varchar(200), -- Comma-separated list of rows to use as
groupings of data
@Column_Heading varchar(200), -- Column to use as heading
@Column_Head_SQL varchar(2000), -- SQL that returns set of possible
column headings
@Operation varchar(10), -- SUM, PRODUCT, etc
@Op_Argument varchar(200), -- Column to use as argument in operation
@Add_Row_Summary char(1) -- 'S' to include summary, 'N' to omit

AS

Declare @SQL varchar(2000),
@Summary_SQL varchar(2000) -- to summarize each row

Set @SQL = 'SELECT ' + @Row_Headings + ', '
Set @Summary_SQL = ''


CREATE TABLE #Col_Heads
(
Col_ID int identity(1,1),
Col_Head varchar(200) NULL
)
Exec ('INSERT INTO #Col_Heads(Col_Head) ' + @Column_Head_SQL)

DECLARE @Col_ID_Curr int, -- column being checked
@Col_ID_Old int,
@Curr_Col_Head varchar(200),
@Pivot_SQL varchar(200) -- pivot SQL for current column


SELECT TOP 1 @Col_ID_Curr = Col_ID, @Curr_Col_Head = Col_Head
FROM #Col_Heads ORDER BY Col_ID

IF (@Col_ID_Curr IS NOT NULL )
BEGIN

Set @Col_ID_Old = @Col_ID_Curr - 1

WHILE (@Col_ID_Old <> @Col_ID_Curr)
BEGIN

Set @Pivot_SQL = char(13) + @Operation
+ '(CASE ' + @Column_Heading
+ ' WHEN ''' + @Curr_Col_Head + ''' THEN ' + @Op_Argument
+ ' ELSE SPACE(2) END) AS ' + @Curr_Col_Head

Set @SQL = @SQL + ' ' + @Pivot_SQL

If (@Add_Row_Summary='S')
Set @Summary_SQL = @Summary_SQL + 'Pivot_Data.' + @Curr_Col_Head

Set @Col_ID_Old = @Col_ID_Curr
SELECT TOP 1 @Col_ID_Curr = Col_ID, @Curr_Col_Head = Col_Head
FROM #Col_Heads
WHERE Col_ID > @Col_ID_Curr
ORDER BY Col_ID

IF (@Col_ID_Old <> @Col_ID_Curr)
Begin
Set @SQL = @SQL + ', '
Set @Summary_SQL = @Summary_SQL + ' + '
End
END
END



DROP TABLE #Col_Heads

Set @SQL = @SQL + char(13) + 'FROM (' + @Base_Data_SQL + ') AS Base_Data '
+ char(13) + 'GROUP BY ' + @Row_Headings

If (@Add_Row_Summary='S')
Begin
Set @SQL = 'SELECT Pivot_Data.*, ' + char(13)
+ ' (' + @Summary_SQL + ') AS RowTotal ' + char(13)
+ 'FROM (' + @SQL + ') AS Pivot_Data'
End


Print @SQL
Exec (@SQL)
go

exec proc_Query_Pivot_1
micondicion"
'SELECT id_libro, titulo, nombre
FROM librosCategorias
INNER JOIN categorias ON categorias.idcategoria librosCategorias.idcategoria
INNER JOIN libros on idLibro = id_libro
',
'id_libro, titulo',
'nombre',
'SELECT nombre FROM categorias',
'MAX',
quiero mostrar 'Si'
"'Si'",
'N'



"Liliana Sorrentino" escribió en el mensaje
news:#
Hola Jorge,

Fijate si este ejemplo te sirve, usa el nombre de la categoría como título
de cada una de las columnas y trabaja con un número variable de las


mismas.

Saludos... Liliana.

"Jorge Luis Medrano" escribió en el mensaje
news:
> ´las datos son algo así.
>
> tengo una tabla de datos globales algo así:
> codigo valor
> 1 1215
> 2 1518
> 3 12345
> 4 1201
> 5 1000
>
> esta tabla la genero de unos datos globales en el cual genero sacando


los
> cinco con valores más altos por año... el problema es que respecto los
años
> van ... hay movimientos en los codigos... como por ejemplo el 5 puede


ser
> primero el año siguiente... etc.
>
> bueno... continuando con los datos... luego genero un query tipo tabla
> cruzada que me tire los valores por columna de esos cinco codigos,
ordenados
> por país como te digo el problema es que como cada año cambia, y


para
> saber con precisión los codigos que se mueven necesito ponerle el
codigo
> del codigo a la columna.
>
> Espero que esto te ayude y muchas gracias.
>
> "Maximiliano D. A." escribió en el


mensaje
> news:
> > Hola, hmmm a ver veamos!! vos tenes una consulta que buscas cambiar
> siempre
> > el nombre de las columnas? podrias enviarme un poco mas de info como
para
> > poder ayudarte.
> >
> > Gracias
> >
> >
> > "Jorge Luis Medrano" escribió en el


mensaje
> > news:
> > > Nuevamente molestando al grupo con una duda y un problema bastante
> > extraño:
> > >
> > > Tengo una consulta en la cual tengo cinco productos, de los cuales
debo
> > > mostrar en cinco columnas, ordenados al país de destino.
> > >
> > > Mi problema es que estos datos cambian constantemente y no son lo
mismo,
> > por
> > > lo que necesito cambiar el nombre de la columna en cada momento,


Cómo
> > podría
> > > hacer eso????? he pensado trabajar en las tablas del sistema,


pero
> no
> > me
> > > parece muy buena idea.
> > >
> > > Muchas gracias y buen día.
> > >
> > >
> >
> >
>
>


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