.Net developer

CREATE TABLE [dbo].[tb_empresas](
    [data] [date] NULL,
    [nome] [varchar](100) NULL,
    [valor] [decimal](18, 2) NULL
) ON [PRIMARY]
 
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-01-01',103),  'EMPRESA1',   100)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-02-02',103),  'EMPRESA2',   200)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-03-03',103),  'EMPRESA3',   300)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-04-04',103),  'EMPRESA4',   400)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-05-05',103),  'EMPRESA5',   500)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-06-06',103),  'EMPRESA6',   600)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-07-07',103),  'EMPRESA7',   700)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-08-08',103),  'EMPRESA8',   800)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-09-09',103),  'EMPRESA9',   900)
  INSERT INTO tb_empresas (data, nome, valor)
  VALUES  (convert(datetime,'2012-10-10',103),  'EMPRESA10',   1000)
 
   
 select data, nome, valor  from tb_empresas




create procedure [dbo].[OBTER_COLUNAS_DINAMICAMENTE]
AS
SET NOCOUNT ON
 
DECLARE @COLUNAS VARCHAR(MAX)
SET @COLUNAS = ''
 
SELECT @COLUNAS = COALESCE(@COLUNAS + '[' + (CAST(NOME AS NVARCHAR(255))) + '],','')
FROM (SELECT DISTINCT NOME FROM tb_empresas) AS DADOS_HORIZONTAIS
SET @COLUNAS = LEFT (@COLUNAS, LEN(@COLUNAS)-1)
 
DECLARE @SQLSTRING NVARCHAR(500);
 
SET @SQLSTRING = N'
SELECT * FROM(SELECT  DATEPART(MONTH, DATA) AS MES, NOME, VALOR FROM tb_empresas) AS DADOS_HORIZONTAIS
PIVOT(
 MAX(VALOR) FOR NOME IN('+@COLUNAS+')) AS PivotTable;'
 
EXECUTE SP_EXECUTESQL @SQLSTRING


0 comentários: