sexta-feira, 19 de fevereiro de 2016

Como fazer uma espécie de GROUP_CONCAT no SQL SERVER

Ele rega os montes desde as suas câmaras; a terra farta-se do fruto das suas obras. (Salmos 104:13)
Imaginemos que, queremos retornar uma lista de produtos de uma loja numa consulta só. Será que é possível? Por exemplo: Que
retorne no atributo 'produtos' o seguinte: videogame,cd,dvd,cadeira. 
 
No MYSQL, é mais simples, basta apenas chamar a função GROUP_CONCAT. 
 
Mas, no SQL SERVER, é um pouco mais complicado. Para se realizar isto deve-se fazer o seguinte;
 
Considere a seguinte estrutura de tabelas:
 
        CREATE TABLE loja(
 id INTEGER,
 nome varchar(50)
  
 )

 CREATE TABLE produto(
 id INTEGER,
 id_loja INTEGER
 nome VARCHAR(10),
 preco FLOAT
 )
Agora, vamos realizar algumas inserções:
 

INSERT INTO loja VALUES(1,'CARREFULL');

INSERT INTO produto VALUES (1,1,'videogame',2.00);
INSERT INTO produto VALUES (2,1,'cd',3.00);
INSERT INTO produto VALUES (3,1,'dvd',4.00);
INSERT INTO produto VALUES (4,1,'cadeira',5.00);

Criação de uma tabela temporária (Isto pode variar dependendo do SGBD usado) com os dados dos produtos

SELECT produto.nome, 
 Values1 = CAST(NULL AS VARCHAR(8000))
 INTO #teste
 FROM produto
 WHERE produto.id_loja = '1'

Atualização para percorrer todos os registros da tabela temporária

 /* Criação de variáveis */
 DECLARE

  @retorno VARCHAR(8000),

  @Values1 varchar(8000)

 
 /* Setando valor padrão para a variável @Values1 */
 SET @Values1 = ''

 /* Realizando uma atualização  na tabela temporária #teste para percorrer todos os registros, e assim, poder adicionar o nome de cada produto á variável @Values1 */
 UPDATE #teste
  SET Values1 = nome,

  @Values1 =  @Values1  + nome + ','

 /* Setando condicionalmente o valor da varíavel @retorno como equivalente ao valor da variável @Values1 */ 
 if  @Values1 = ''

  SET @retorno = '-'

 else

  SET @retorno = @Values1

Na consulta de loja, definimos que a lista de nomes de produtos separados por vírgula, ficarão na coluna 'produtos'

 select loja.*,produtos=@retorno from loja WHERE id = 1;

quinta-feira, 28 de janeiro de 2016

Aplicação em python utilizando Pyramid com SQLAlchemy

Ainda antes que houvesse dia, eu sou; e ninguém há que possa fazer escapar das minhas mãos; agindo eu, quem o impedirá? Isaías 43:13
Olá pessoas.
Esta é mais uma postagem sobre programação, depois de quase 2 anos sem ter atualizado este blog. Isso devido á muita correria e trabalho, graças á Deus.
Nesta publicação, falarei como desenvolver uma aplicação simples em PYTHON, utilizando os frameworks PYRAMID e SQLAlchemy. 
Segue o link para documentação abaixo: