<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentarios en: MySQL no admite TRANSFORM PIVOT (pero se pueden obtener resultados parecidos).</title>
	<atom:link href="http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos</link>
	<description>// anotaciones de análisis y programación en mi día a día como consultor de software</description>
	<lastBuildDate>Mon, 26 Oct 2009 17:21:23 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Por: Angel</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-2912</link>
		<dc:creator>Angel</dc:creator>
		<pubDate>Tue, 26 May 2009 08:11:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-2912</guid>
		<description>Simplemente excelente, funciona muy bien, muy agradecido.</description>
		<content:encoded><![CDATA[<p>Simplemente excelente, funciona muy bien, muy agradecido.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Ryan</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-2874</link>
		<dc:creator>Ryan</dc:creator>
		<pubDate>Sun, 17 May 2009 22:35:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-2874</guid>
		<description>Rapidamente he podido solucionar, para obtener una tabla cruzada con la cantidad de registros x mes en el año 2009 solucione de esta forma (es extraño pero me salio fue con SUM y no con COUNT):

SELECT
    municipio,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then 1 else 0 end) AS Enero,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then 1 else 0 end) AS Febrero,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then 1 else 0 end) AS Marzo,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then 1 else 0 end) AS Abril,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then 1 else 0 end) AS Mayo,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then 1 else 0 end) AS Junio,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then 1 else 0 end) AS Julio,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then 1 else 0 end) AS Agosto,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then 1 else 0 end) AS Septiembre,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then 1 else 0 end) AS Octubre,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then 1 else 0 end) AS Noviembre,
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then 1 else 0 end) AS Diciembre
FROM
    casos
GROUP BY 
    municipio</description>
		<content:encoded><![CDATA[<p>Rapidamente he podido solucionar, para obtener una tabla cruzada con la cantidad de registros x mes en el año 2009 solucione de esta forma (es extraño pero me salio fue con SUM y no con COUNT):</p>
<p>SELECT<br />
    municipio,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then 1 else 0 end) AS Enero,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then 1 else 0 end) AS Febrero,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then 1 else 0 end) AS Marzo,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then 1 else 0 end) AS Abril,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then 1 else 0 end) AS Mayo,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then 1 else 0 end) AS Junio,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then 1 else 0 end) AS Julio,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then 1 else 0 end) AS Agosto,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then 1 else 0 end) AS Septiembre,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then 1 else 0 end) AS Octubre,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then 1 else 0 end) AS Noviembre,<br />
    SUM(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then 1 else 0 end) AS Diciembre<br />
FROM<br />
    casos<br />
GROUP BY<br />
    municipio</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Ryan</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-2873</link>
		<dc:creator>Ryan</dc:creator>
		<pubDate>Sun, 17 May 2009 22:20:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-2873</guid>
		<description>Muchas Gracias x el ejemplo y las sugerencias de todos, tomando las mismas me quedo asi la tabla cruzada

SELECT
    municipio,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then id else 0 end) AS Enero,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then id else 0 end) AS Febrero,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then id else 0 end) AS Marzo,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then id else 0 end) AS Abril,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then id else 0 end) AS Mayo
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then id else 0 end) AS Junio,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then id else 0 end) AS Julio,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then id else 0 end) AS Agosto,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then id else 0 end) AS Septiembre,
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then id else 0 end) AS Octubre
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then id else 0 end) AS Noviembre
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then id else 0 end) AS Diciembre
FROM
    casos
GROUP BY 
    municipio

¿Xq no funciona? Es decir no coloca la cantidad x municipio en cada mes, sino q el COUNT me cuenta todos los registros y me coloca el total de registros en cada mes.

Ahora si agrego un campo llamado &#039;cantidad&#039; a la tabla casos y le coloco 1 a todos los registros, con SUM si funciona lo siguiente:

SELECT
    municipio,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then cantidad else 0 end) AS Enero,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then cantidad else 0 end) AS Febrero,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then cantidad else 0 end) AS Marzo,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then cantidad else 0 end) AS Abril,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then cantidad else 0 end) AS Mayo
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then cantidad else 0 end) AS Junio,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then cantidad else 0 end) AS Julio,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then cantidad else 0 end) AS Agosto,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then cantidad else 0 end) AS Septiembre,
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then cantidad else 0 end) AS Octubre
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then cantidad else 0 end) AS Noviembre
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then cantidad else 0 end) AS Diciembre
FROM
    casos
GROUP BY 
    municipio

¿Xq no funciona con COUNT q seria lo correcto?</description>
		<content:encoded><![CDATA[<p>Muchas Gracias x el ejemplo y las sugerencias de todos, tomando las mismas me quedo asi la tabla cruzada</p>
<p>SELECT<br />
    municipio,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then id else 0 end) AS Enero,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then id else 0 end) AS Febrero,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then id else 0 end) AS Marzo,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then id else 0 end) AS Abril,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then id else 0 end) AS Mayo<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then id else 0 end) AS Junio,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then id else 0 end) AS Julio,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then id else 0 end) AS Agosto,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then id else 0 end) AS Septiembre,<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then id else 0 end) AS Octubre<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then id else 0 end) AS Noviembre<br />
    count(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then id else 0 end) AS Diciembre<br />
FROM<br />
    casos<br />
GROUP BY<br />
    municipio</p>
<p>¿Xq no funciona? Es decir no coloca la cantidad x municipio en cada mes, sino q el COUNT me cuenta todos los registros y me coloca el total de registros en cada mes.</p>
<p>Ahora si agrego un campo llamado 'cantidad' a la tabla casos y le coloco 1 a todos los registros, con SUM si funciona lo siguiente:</p>
<p>SELECT<br />
    municipio,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200901 then cantidad else 0 end) AS Enero,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200902 then cantidad else 0 end) AS Febrero,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200903 then cantidad else 0 end) AS Marzo,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200904 then cantidad else 0 end) AS Abril,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200905 then cantidad else 0 end) AS Mayo<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200906 then cantidad else 0 end) AS Junio,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200907 then cantidad else 0 end) AS Julio,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200908 then cantidad else 0 end) AS Agosto,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200909 then cantidad else 0 end) AS Septiembre,<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200910 then cantidad else 0 end) AS Octubre<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200911 then cantidad else 0 end) AS Noviembre<br />
    Sum(case when EXTRACT(YEAR_MONTH from fecha) = 200912 then cantidad else 0 end) AS Diciembre<br />
FROM<br />
    casos<br />
GROUP BY<br />
    municipio</p>
<p>¿Xq no funciona con COUNT q seria lo correcto?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Albert Mata</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-214</link>
		<dc:creator>Albert Mata</dc:creator>
		<pubDate>Thu, 27 Nov 2008 21:53:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-214</guid>
		<description>Gracias por los añadidos, mañana los investigo. Y gracias también por avisarme que no chuta bien el aviso por mail... miraré si se puede revisar algo ahí también. Igual debería ir actualizando a la versión actual de WordPress (estas cosas siempre me cuestan... para qué actualizar lo que funciona).</description>
		<content:encoded><![CDATA[<p>Gracias por los añadidos, mañana los investigo. Y gracias también por avisarme que no chuta bien el aviso por mail... miraré si se puede revisar algo ahí también. Igual debería ir actualizando a la versión actual de WordPress (estas cosas siempre me cuestan... para qué actualizar lo que funciona).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: pedro</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-211</link>
		<dc:creator>pedro</dc:creator>
		<pubDate>Thu, 27 Nov 2008 17:04:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-211</guid>
		<description>No se si es exactamente lo que buscas, pero la funcion EXTRACT tiene un parametro YEAR_MONTH para obtener el año y mes de una tacada sin usar DATE_FORMAT

EXTRACT(YEAR_MONTH from sfc_mth)

Creo que la notificacion via mail no te esta funcionando :S</description>
		<content:encoded><![CDATA[<p>No se si es exactamente lo que buscas, pero la funcion EXTRACT tiene un parametro YEAR_MONTH para obtener el año y mes de una tacada sin usar DATE_FORMAT</p>
<p>EXTRACT(YEAR_MONTH from sfc_mth)</p>
<p>Creo que la notificacion via mail no te esta funcionando :S</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Luis Medel</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-210</link>
		<dc:creator>Luis Medel</dc:creator>
		<pubDate>Thu, 27 Nov 2008 16:33:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-210</guid>
		<description>Por cierto, aprovecho para *volver* a corregirme. Donde digo ADDTIME es ADDDATE :D</description>
		<content:encoded><![CDATA[<p>Por cierto, aprovecho para *volver* a corregirme. Donde digo ADDTIME es ADDDATE <img src='http://www.albertmata.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Luis Medel</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-209</link>
		<dc:creator>Luis Medel</dc:creator>
		<pubDate>Thu, 27 Nov 2008 14:56:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-209</guid>
		<description>Pues no sabría decirte si existe una mejora en rendimiento, la verdad. El método del &quot;IF&quot; nunca lo he utilizado.

Respecto a lo otro que comentas, se me ocurre que puedes realizar la comparación con la fecha actual aplicando ADDTIME a la columna (sumas meses y listo) Siempre será más rápido que realizar operaciones sobre cadenas.
Si eso no funciona (te hablo sin poder comprobar nada de lo que te digo) intenta con DATEFORMAT(fecha, &#039;%Y%m&#039;). Así obtienes año y mes una tacada (como cadena, claro)</description>
		<content:encoded><![CDATA[<p>Pues no sabría decirte si existe una mejora en rendimiento, la verdad. El método del "IF" nunca lo he utilizado.</p>
<p>Respecto a lo otro que comentas, se me ocurre que puedes realizar la comparación con la fecha actual aplicando ADDTIME a la columna (sumas meses y listo) Siempre será más rápido que realizar operaciones sobre cadenas.<br />
Si eso no funciona (te hablo sin poder comprobar nada de lo que te digo) intenta con DATEFORMAT(fecha, '%Y%m'). Así obtienes año y mes una tacada (como cadena, claro)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Albert Mata</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-208</link>
		<dc:creator>Albert Mata</dc:creator>
		<pubDate>Thu, 27 Nov 2008 14:19:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-208</guid>
		<description>Y ya abusando de la confianza (¡no haber entrado!) lo de MONTH(X) está bien, pero en realidad tendría que utilizar YEAR(X) y MONTH(X) ya que no quiero saber cuánto le venderemos en diciembres varios, sino uno en concreto, por eso me decidí a utilizar un MID(X,1,7)... porque... ¿no hay ninguna función propia de MySQL que permita comparar mes y año al unísono, verdad (no valen una stored function)?</description>
		<content:encoded><![CDATA[<p>Y ya abusando de la confianza (¡no haber entrado!) lo de MONTH(X) está bien, pero en realidad tendría que utilizar YEAR(X) y MONTH(X) ya que no quiero saber cuánto le venderemos en diciembres varios, sino uno en concreto, por eso me decidí a utilizar un MID(X,1,7)... porque... ¿no hay ninguna función propia de MySQL que permita comparar mes y año al unísono, verdad (no valen una stored function)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Albert Mata</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-207</link>
		<dc:creator>Albert Mata</dc:creator>
		<pubDate>Thu, 27 Nov 2008 14:08:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-207</guid>
		<description>Hola Pedro!

Pues caí de casualidad (bueno, de casualidad no, Googleando rato largo) en esa página, pero la verdad es que no me terminó de convencer lo complejo de ese sistema. De todos modos, actualizaré el post para reflejar dicho link (para el que no se lea los comentarios). Gracias!</description>
		<content:encoded><![CDATA[<p>Hola Pedro!</p>
<p>Pues caí de casualidad (bueno, de casualidad no, Googleando rato largo) en esa página, pero la verdad es que no me terminó de convencer lo complejo de ese sistema. De todos modos, actualizaré el post para reflejar dicho link (para el que no se lea los comentarios). Gracias!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Albert Mata</title>
		<link>http://www.albertmata.net/2008/11/mysql-no-admite-transform-pivot-pero-se-pueden-obtener-resultados-parecidos/comment-page-1/#comment-206</link>
		<dc:creator>Albert Mata</dc:creator>
		<pubDate>Thu, 27 Nov 2008 14:04:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=145#comment-206</guid>
		<description>Luís, mil gracias por tu comentario. Sin embargo tengo una duda... ¿aporta alguna mejora -en rendimiento, se entiende- la versión 1 respecto a la 2?

1) SUM(CASE WHEN MONTH(sfc_mth) = MONTH(DATE_ADD(NOW(),INTERVAL 2 MONTH)) THEN sfc_qty ELSE 0 END) AS M2

2) SUM(IF(MONTH(sfc_mth) = MONTH(DATE_ADD(NOW(),INTERVAL 2 MONTH)), sfc_qty, 0)) AS M2</description>
		<content:encoded><![CDATA[<p>Luís, mil gracias por tu comentario. Sin embargo tengo una duda... ¿aporta alguna mejora -en rendimiento, se entiende- la versión 1 respecto a la 2?</p>
<p>1) SUM(CASE WHEN MONTH(sfc_mth) = MONTH(DATE_ADD(NOW(),INTERVAL 2 MONTH)) THEN sfc_qty ELSE 0 END) AS M2</p>
<p>2) SUM(IF(MONTH(sfc_mth) = MONTH(DATE_ADD(NOW(),INTERVAL 2 MONTH)), sfc_qty, 0)) AS M2</p>
]]></content:encoded>
	</item>
</channel>
</rss>
