Duda con el Crosstab

14/01/2004 - 18:44 por Lic. Jose Aguilera Iglesias | Informe spam
Hola Foro:

El Access existe la posibilidad de crear una consulta de tipo Crosstab
Query, permitiendo crear una consulta que me genera lo siguiente:

TRANSFORM Count(Tabla.id) AS Cantidad
SELECT Tabla.Division
FROM Tabla
GROUP BY Tabla.Division
PIVOT Tabla.Nombre;

Devolviendome algo como esto
Division are duelis is leo rey yo
Cam 1





Hab


1


Hg
1

1 1
Ltu

1





La pregunta es la siguiente: Por qué cuando trato de hacer lo mismo en SQL
Server no puedo? o Cómo lo puedo hacer en SQL Server?

Agradeciendoles de antemano

Jaigle

Preguntas similare

Leer las respuestas

#1 Pablo Salazar
14/01/2004 - 19:36 | Informe spam
Deberias de buscar en el BOL ahi hay un ejemplo, de todos modos te mando el
ejemplo
Se tiene una tabla como estaYear Quarter Amount
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4
y queres trasformarla asi

Year Q1 Q2 Q3 Q4
1990 1.1 1.2 1.3 1.4
1991 2.1 2.2 2.3 2.4


Entonces usa la siguiente consulta
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

La Tabla tiene la siguiente forma .

USE Northwind
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO
Respuesta Responder a este mensaje
#2 Isaías
14/01/2004 - 19:50 | Informe spam
Vea esta solucion:

http://www.planet-source-code.com/v...wCode.asp?
txtCodeIdh0&lngWId=5
Respuesta Responder a este mensaje
#3 Lic. Jose Aguilera Iglesias
14/01/2004 - 21:04 | Informe spam
Gracias por tu interés ante todo. Ya yo lo había buscado en el BOL y, de
hecho, ya vi el ejemplo, sólo estaba traando de investigar si se podía
obtener el mismo comportamiento que en Access. En este ejemplo se puede
apreciar que, para realizar la operación, se necesita conocer de antemano
los registros para el pivote (en el ejemplo se conoce que son 4 Quarters),
luego, si yo estoy trabajando con una tabla donde los registros son
variables se me hace muy incómodo reestructurar la consulta cada vez que me
cambien los registro.

Me explico ahora mejor?

Jaigle

"Pablo Salazar" wrote in message
news:
Deberias de buscar en el BOL ahi hay un ejemplo, de todos modos te mando


el
ejemplo
Se tiene una tabla como estaYear Quarter Amount
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4
y queres trasformarla asi

Year Q1 Q2 Q3 Q4
1990 1.1 1.2 1.3 1.4
1991 2.1 2.2 2.3 2.4


Entonces usa la siguiente consulta
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

La Tabla tiene la siguiente forma .

USE Northwind
GO

CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO


Respuesta Responder a este mensaje
#4 Adrian Garcia
15/01/2004 - 00:35 | Informe spam
No tienes esa posibilidad en SQL Server 2000.
La proxima version si va a tener extensiones del lenguaje T-SQL para
realizar este tipo de operaciones.

La unica forma en que se me ocurre que se podria hacer es desde tu
aplicacion. Desde alli invocarias a:

SELECT Tabla.Division
FROM Tabla
GROUP BY Tabla.Division



Y luego la conviertes en un tabla de pivote programaticamente o utilizas
algun componente (por ejemplo los que vienen en e Office Developer) para
ello.

Saludos
Adrian D. Garcia
NDSoft


"Lic. Jose Aguilera Iglesias" wrote in message
news:
Hola Foro:

El Access existe la posibilidad de crear una consulta de tipo Crosstab
Query, permitiendo crear una consulta que me genera lo siguiente:

TRANSFORM Count(Tabla.id) AS Cantidad
SELECT Tabla.Division
FROM Tabla
GROUP BY Tabla.Division
PIVOT Tabla.Nombre;

Devolviendome algo como esto
Division are duelis is leo rey yo
Cam 1





Hab


1


Hg
1

1 1
Ltu

1





La pregunta es la siguiente: Por qué cuando trato de hacer lo mismo en SQL
Server no puedo? o Cómo lo puedo hacer en SQL Server?

Agradeciendoles de antemano

Jaigle


Respuesta Responder a este mensaje
#5 Antonio Ortiz
16/01/2004 - 17:53 | Informe spam
Supongo que esto se puede hacer con OLAP, que por cierto viene muy poco en
los libros en linea de MSDN. Estoy intentado inicar con esto.

Saludos,

Antonio Ortiz Ramirez
asesor en sistemas

www.aortiz.net


"Adrian Garcia" escribió en el mensaje
news:
No tienes esa posibilidad en SQL Server 2000.
La proxima version si va a tener extensiones del lenguaje T-SQL para
realizar este tipo de operaciones.

La unica forma en que se me ocurre que se podria hacer es desde tu
aplicacion. Desde alli invocarias a:

> SELECT Tabla.Division
> FROM Tabla
> GROUP BY Tabla.Division

Y luego la conviertes en un tabla de pivote programaticamente o utilizas
algun componente (por ejemplo los que vienen en e Office Developer) para
ello.

Saludos
Adrian D. Garcia
NDSoft


"Lic. Jose Aguilera Iglesias" wrote in message
news:
> Hola Foro:
>
> El Access existe la posibilidad de crear una consulta de tipo Crosstab
> Query, permitiendo crear una consulta que me genera lo siguiente:
>
> TRANSFORM Count(Tabla.id) AS Cantidad
> SELECT Tabla.Division
> FROM Tabla
> GROUP BY Tabla.Division
> PIVOT Tabla.Nombre;
>
> Devolviendome algo como esto
> Division are duelis is leo rey yo
> Cam 1
>
>
>
>
>
> Hab
>
>
> 1
>
>
> Hg
> 1
>
> 1 1
> Ltu
>
> 1
>
>
>
>
>
> La pregunta es la siguiente: Por qué cuando trato de hacer lo mismo en


SQL
> Server no puedo? o Cómo lo puedo hacer en SQL Server?
>
> Agradeciendoles de antemano
>
> Jaigle
>
>


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