SQL Server - Funcion pivot SQL

 
Vista:

Funcion pivot SQL

Publicado por Carlos (2 intervenciones) el 14/10/2010 18:20:07
Buenas tardes, llevo todo el día intentando sacar una query muy simple y no lo consigo. Se trata de utilizar el comando pivot, o si pudiera ser sin él igualmente, como ustedes vean. Paso a explicarles:



1. Tengo una tabla como esta de ejemplo:

Fecha Estado

01-01-2010 CL

09-01-2010 CL

05-01-2010 OP

04-02-2010 OP

08-02-2010 OP



Pues bien, necesito una query que me devuelva esto:

MES CL OP

Enero 2 1

Febrero 0 2



Supongo que lo han entendido, se trata de contar en cada mes cuantos estados OP y cuantos estados CL ha habido. Ojala puedan ayudarme, muchas gracias, un saludo.

Lo estoy intentando con esta query pero no hay forma:

SELECT fecha, [OP], [CL]
FROM visitas

PIVOT (count(fecha) FOR fecha IN ([OP], [CL])) as estado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Funcion pivot SQL

Publicado por Isaias (4558 intervenciones) el 14/10/2010 19:33:51
Carlos

Un consejo, evita utlizar la frase "ME HAN ENTENDIDO", por "ESPERO HABERME EXPLICADO".

¿Que tal esta solución?

CREATE TABLE #PRUEBA(Fecha datetime, Estado char(2))
INSERT INTO #PRUEBA VALUES('01-01-2010','CL')
INSERT INTO #PRUEBA VALUES('09-01-2010','CL')
INSERT INTO #PRUEBA VALUES('05-01-2010','OP')
INSERT INTO #PRUEBA VALUES('04-02-2010','OP')
INSERT INTO #PRUEBA VALUES('08-02-2010','OP')

SELECT DATEPART(MM, Fecha) as mes,
SUM(CASE WHEN Estado = 'CL' THEN 1 ELSE 0 END) AS [CL],
SUM(CASE WHEN Estado = 'OP' THEN 1 ELSE 0 END) AS [OP]
FROM #PRUEBA
GROUP BY DATEPART(MM, Fecha)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funcion pivot SQL

Publicado por Carlos (2 intervenciones) el 15/10/2010 13:42:47
Muchas gracias, Me ha servido perfectamente!! Y perdón por la expresión, no quería decir eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funcion pivot SQL

Publicado por jams (93 intervenciones) el 03/12/2010 18:03:09
Puedes por supuesto PIVOT aunque tarde espero te sirva, pienso que debemos usar las nuevas bondades que nos ofrece sql server

prueba esto

declare @visitas table(fecha datetime, estado varchar(10))

insert into @visitas values('01-01-2010','cl')
insert into @visitas values('01-09-2010','cl')
insert into @visitas values('01-05-2010','op')
insert into @visitas values('02-04-2010','op')
insert into @visitas values('02-08-2010','op')

select mes,[cl], [op]
from
(select case datepart(month,fecha) when 1 then 'enero'
when 2 then 'febrero'
when 3 then 'marzo'
when 4 then 'abril'
when 5 then 'mayo'
when 6 then 'junio'
when 7 then 'julio'
when 8 then 'agosto'
when 9 then 'septiembre'
when 10 then 'octubre'
when 11 then 'noviembre'
when 12 then 'diciembre'
end as mes,estado
from @visitas) as tablaapivotear
pivot
(
count(estado)
for estado in ([cl],[op])
) as tablapivoteada

Saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion pivot SQL

Publicado por Leonardo (1 intervención) el 16/04/2012 03:52:47
Hola necesito si me puedes ayudar con mi problema que no doy con la solucion, tiene algo que ver con pivot pero no se muy bien como utilizarlo.-
El tema es el siguiente:
1- Tengo que mostrar el resultado de a 31 columas, en la primer columna UNIDNEGO y en las siguientes 30 las FECHAS.-

estos son los datos:

SELECT UNIDNEGO, CLIENTE, A_FECHAESTADIA FROM PEDIDOS

UNIDNEGO CLIENTE A_FECHAESTADIA
--------- ---------- -----------------------
417 010001159 2011-12-18 00:00:00.000
417 010001159 2011-12-19 00:00:00.000
417 010001159 2011-12-20 00:00:00.000
417 010001159 2011-12-21 00:00:00.000
301 010001158 2011-12-27 00:00:00.000
301 010001158 2011-12-28 00:00:00.000
301 010001158 2011-12-29 00:00:00.000
...

tendria que quedar algo asi:

UNIDNEGO 2011-12-18 2011-12-19 2011-12-20 2011-12-21 2011-12-22 2011-12-23 2011-12-24 2011-12-25 2011-12-26 2011-12-27 2011-12-28 2011-12-29 ...
--------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ...
301 010001158 010001158 010001158 ...
417 010001159 010001159 010001159 010001159 ...

desde ya gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar