quarta-feira, 9 de fevereiro de 2011

SQLServer CTE


Achei muito interessante... e pode ser muito útil em algum momento
 para um de nos que trabalhamos com Tabelas temporária, tanto para
 virar dados(pivot).. trata-se do CTE (Common Table Expression) é um
 novo recurso fornecido pela Microsoft SQL Server 2005. No mundo real,
 que muitas vezes precisam de consulta de dados hierárquica do banco de
 dados. Por exemplo, para obter uma lista de lista hierárquica de todos
 os funcionários, a lista de categorias de produtos, etc CTE cumpre este
 requisito fazendo uma consulta recursiva.

Gostei muito desse exemplo, copie/cole e rode:
-------------------------------------------------------------------------- 
DECLARE @Mes INT ,@Ano INT
SELECT @Mes = 10 ,@Ano = 2010;

WITH CTE (Data) AS
(
SELECT DATEADD(year, @Ano - 1900, DATEADD(month, @Mes - 1, 0))
UNION ALL
SELECT Data+1
FROM CTE
WHERE MONTH(Data + 1) = @Mes
)

SELECT
[1] AS [Domingo]
, [2] AS [Segunda-Feira]
, [3] AS [Terça-Feira]
, [4] AS [Quarta-Feira]
, [5] AS [Quinta-Feira]
, [6] AS [Sexta-Feira]
, [7] AS [Sábado]
FROM (
SELECT DAY(Data) AS Dia, 
DATEPART(weekday, Data) DiaSemana, 
DATEPART(week, Data) Semana
FROM CTE
) AS Datas
PIVOT
(
MAX(Dia) FOR DiaSemana
IN ([1], [2], [3], [4], [5], [6], [7]) ) AS A
--select * from CTE

Nenhum comentário:

Postar um comentário