MSSQL => MYSQL

ROGERIOAZEVEDO 18/07/2014 13:31:41
#439648
Boa tarde.

Galera,

Eu tenho uma querry utilizando o conceito de PIVOT para transformar linhas em colunas. No exemplo abaixo eu agrupo ocorrencias de cancelamento Mês a Mês. Eu utilizo essa querry em uma aplicação minha há muito tempo.

  SELECT Motivo, 
ISNULL([JAN],[ô][ô]) AS [JAN], ISNULL([FEV],[ô][ô]) AS [FEV], ISNULL([MAR],[ô][ô]) AS [MAR],
ISNULL([ABR],[ô][ô]) AS [ABR], ISNULL([MAI],[ô][ô]) AS [MAI], ISNULL([JUN],[ô][ô]) AS [JUN],
ISNULL([JUL],[ô][ô]) AS [JUL], ISNULL([AGO],[ô][ô]) AS [AGO], ISNULL([SET],[ô][ô]) AS [SET],
ISNULL([OUT],[ô][ô]) AS [OUT], ISNULL([NOV],[ô][ô]) AS [NOV], iSNULL([DEZ],[ô][ô]) AS [DEZ]
FROM ( SELECT CASE MONTH(CAN.DataConfirmação)
WHEN [ô]01[ô] THEN [ô]JAN[ô] WHEN [ô]02[ô] THEN [ô]FEV[ô] WHEN [ô]03[ô] THEN [ô]MAR[ô] WHEN [ô]04[ô] THEN [ô]ABR[ô]
WHEN [ô]05[ô] THEN [ô]MAI[ô] WHEN [ô]06[ô] THEN [ô]JUN[ô] WHEN [ô]07[ô] THEN [ô]JUL[ô] WHEN [ô]08[ô] THEN [ô]AGO[ô]
WHEN [ô]09[ô] THEN [ô]SET[ô] WHEN [ô]10[ô] THEN [ô]OUT[ô] WHEN [ô]11[ô] THEN [ô]NOV[ô] WHEN [ô]12[ô] THEN [ô]DEZ[ô]
END AS Mes, CAN.MotCanc AS Motivo,
COUNT(CodCliente) AS Qtde
FROM ClientesCancelamentos AS CAN
WHERE CAN.DataConfirmação BETWEEN [ô]2013-01-01 00:00:00[ô] AND [ô]2013-12-31 23:59:59[ô]
AND CAN.DataConfirmação IS NOT NULL
GROUP BY CAN.MotCanc, DATENAME(MONTH,CAN.DataConfirmação),
YEAR(CAN.DataConfirmação), MONTH(CAN.DataConfirmação)) AS S
PIVOT( SUM(Qtde) FOR Mes IN ([JAN], [FEV], [MAR], [ABR], [MAI],
[JUN],[JUL],[AGO],[SET],[OUT],[NOV],[DEZ])) AS P;


No entanto surgiu uma situação e preciso fazer algo bem parecido no MYSQL mas não conheço muito as sintaxes do MYSQL. Note que na querry eu usei [Ô][][Ô] para não dar erro nas palavras reservas do SQL como SET e OUT.
ROGERIOAZEVEDO 29/07/2014 16:58:40
#439990
Alguém?
ROGERIOAZEVEDO 06/08/2014 18:41:06
#440235
Consegui!

Ta ae para quem precisar da sintaxe...

  
SELECT Cond, Condominio, Cidade, Administrador, Telefone,
SUM(CASE Mes WHEN [ô]JAN[ô] THEN Acesso ELSE 0 END) AS [ô]JAN[ô],
SUM(CASE Mes WHEN [ô]FEV[ô] THEN Acesso ELSE 0 END) AS [ô]FEV[ô],
SUM(CASE Mes WHEN [ô]MAR[ô] THEN Acesso ELSE 0 END) AS [ô]MAR[ô],
SUM(CASE Mes WHEN [ô]ABR[ô] THEN Acesso ELSE 0 END) AS [ô]ABR[ô],
SUM(CASE Mes WHEN [ô]MAI[ô] THEN Acesso ELSE 0 END) AS [ô]MAI[ô],
SUM(CASE Mes WHEN [ô]JUN[ô] THEN Acesso ELSE 0 END) AS [ô]JUN[ô],
SUM(CASE Mes WHEN [ô]JUL[ô] THEN Acesso ELSE 0 END) AS [ô]JUL[ô],
SUM(CASE Mes WHEN [ô]AGO[ô] THEN Acesso ELSE 0 END) AS [ô]AGO[ô],
SUM(CASE Mes WHEN [ô]SET[ô] THEN Acesso ELSE 0 END) AS [ô]SET[ô],
SUM(CASE Mes WHEN [ô]OUT[ô] THEN Acesso ELSE 0 END) AS [ô]OUT[ô],
SUM(CASE Mes WHEN [ô]NOV[ô] THEN Acesso ELSE 0 END) AS [ô]NOV[ô],
SUM(CASE Mes WHEN [ô]DEZ[ô] THEN Acesso ELSE 0 END) AS [ô]DEZ[ô],
SUM(Acesso) AS Total

FROM (SELECT LOG.Condominio_ID AS [ô]Cond[ô], UPPER(CON.nome) AS [ô]Condominio[ô],
CON.Cidade AS [ô]Cidade[ô], UPPER(CTO.nome) AS [ô]Administrador[ô],
CTO.Telefone1 AS [ô]Telefone[ô],
CASE MONTH(LOG.Data)
WHEN [ô]01[ô] THEN [ô]JAN[ô] WHEN [ô]02[ô] THEN [ô]FEV[ô] WHEN [ô]03[ô] THEN [ô]MAR[ô] WHEN [ô]04[ô] THEN [ô]ABR[ô]
WHEN [ô]05[ô] THEN [ô]MAI[ô] WHEN [ô]06[ô] THEN [ô]JUN[ô] WHEN [ô]07[ô] THEN [ô]JUL[ô] WHEN [ô]08[ô] THEN [ô]AGO[ô]
WHEN [ô]09[ô] THEN [ô]SET[ô] WHEN [ô]10[ô] THEN [ô]OUT[ô] WHEN [ô]11[ô] THEN [ô]NOV[ô] WHEN [ô]12[ô] THEN [ô]DEZ[ô]
END AS [ô]Mes[ô], COUNT(LOG.ID) as Acesso
FROM log AS LOG
LEFT JOIN plano AS PLN ON PLN.condominio_id = LOG.condominio_id
LEFT JOIN condominio AS CON ON CON.id = LOG.condominio_id
LEFT JOIN contatos AS CTO ON CTO.id = CON.administrador
WHERE LOG.data BETWEEN [ô]2014-08-01 00:00:00[ô] AND [ô]2014-08-31 23:59:59[ô]
AND PLN.codigo_plano = [ô]0[ô] AND CON.ativo = [ô]1[ô] AND CON.deletado = [ô]0[ô]
AND LOG.mensagem LIKE [ô]%entrou%[ô]
GROUP BY LOG.condominio_id, Mes
HAVING COUNT(LOG.ID) > [ô]1[ô]
ORDER BY LOG.condominio_id
LIMIT 3000) AS stats
GROUP BY Cond
ORDER BY Total DESC
LIMIT 3000;
Tópico encerrado , respostas não são mais permitidas