15/04/2018 Database / sql server

select top ${take} * from (

SELECT

      isnull(Ltrim(RTRIM([CPFCGC_PES])),'') as documento

      ,isnull(RTRIM([IE_PES]), '') as inscricaoEstadual

      ,isnull(Ltrim(RTRIM([NOME_PES])), '') as nome

      ,ROW_NUMBER() OVER (order by CPFCGC_PES) AS rowid

      ,isnull(RTRIM([EMAIL]),'') as email, isnull((select enderecos.* from (SELECT RTRIM(PE.BAIRRO_ENDE) as bairro, 

                     RTRIM(PE.RUA_ENDE) as logradouro,

RTRIM(PE.CEP_ENDE) as cep,

RTRIM(CIDADES.CIDADES) as cidade,

RTRIM(CIDADES.UF) as estado,

RTRIM(TIPOS_ENDERECOS.NOME_TIPE) tipoEndereco 

              FROM   [cobsystems].[dbo].[PESSOAS_ENDERECOS] PE inner join [cobsystems].[dbo].[CIDADES] on PE.CIDADE_COD = CIDADES.CODIGO  inner join [cobsystems].[dbo].[TIPOS_ENDERECOS] on TIPOS_ENDERECOS.COD_TIPE = PE.COD_TIPE

              WHERE  PE.COD_PES = p.COD_PES) as enderecos FOR json path, INCLUDE_NULL_VALUES), '') AS enderecos, isnull((select telefones.* from ( 

              SELECT  RTRIM(PT.NR_TEL) as numero, RTRIM(TIPOS_TELEFONES.NOM_TIP) as tipo

              FROM   [cobsystems].[dbo].[PESSOAS_TELEFONES] PT inner join [cobsystems].[dbo].[TIPOS_TELEFONES] on pt.TIPO_TEL = TIPOS_TELEFONES.COD_TIP

              WHERE  PT.COD_PES = p.COD_PES) as telefones FOR json path, INCLUDE_NULL_VALUES), '') AS telefones FROM [cobsystems].[dbo].[PESSOAS] as p where CPFCGC_PES <> '') as c where rowid > ${skip} order by rowid

funciona da seguinte maneira, o take é a quantidade de registros

o skip, é a posição...ou seja, skip = 0, inicia na posicao 0, skip 50, inicia na posicao 50 e assim por diante.

11/04/2018 Database / sql server

Esse é o maior pulo do gato que eu descobri ultimamente em relação a conversão de Select para Json.

Essa primeira query, cria um objeto P e um objeto F, nao deixando tudo na mesma linha

SELECT 

      [SENHA_USU] as password

      ,[NIVEL_USU] as nivel

      ,[ATIVO_USU] as ativo

      ,[NOME_PES] as displayName

  ,EMAIL as email

      ,[DT_ENTRADA_FUNC] as dtEntrada

      ,[DT_SAIDA_FUNC] as dtSaida

      ,[SALARIO_FUNC] as salario

      ,[CARGO_FUNC] as cargo

      ,[COMMISSAO_FUNC] as comissao

  FROM [cobsystems].[dbo].[USUARIOS] inner join FUNCIONARIOS_OLD on USUARIOS.COD_FUNC = FUNCIONARIOS_OLD.COD_FUNC inner join PESSOAS on PESSOAS.COD_PES = FUNCIONARIOS_OLD.COD_PES order by COD_USU  FOR json auto

 

query arrumada

Essa query deixa tudo na mesma linha!

SELECT m.* 

         FROM (

 

SELECT 

      U.SENHA_USU as password,

      U.NIVEL_USU as nivel,

  IIF(U.ATIVO_USU = 1, 'true', 'false') as ativo,

 

      P.NOME_PES as displayName,

  isnull(P.EMAIL, '') as email,

      F.DT_ENTRADA_FUNC as dtEntrada,

      F.DT_SAIDA_FUNC as dtSaida,

      convert(int, isnull(F.SALARIO_FUNC, 0)) as salario,

      F.CARGO_FUNC as cargo,

      convert(int, isnull(F.COMMISSAO_FUNC,0)) as comissao

  FROM [cobsystems].[dbo].[USUARIOS] as U inner join [cobsystems].[dbo].[FUNCIONARIOS_OLD] F on U.COD_FUNC = F.COD_FUNC inner join [cobsystems].[dbo].[PESSOAS] P on P.COD_PES = F.COD_PES

 

) AS m

         FOR JSON AUTO

02/02/2018 Database / sql server

Essa dica é pra quem quer fazer uma query SQL Server e quer que ela seja disponilizada via JSON.

Usar inner join, com inner join e mais inner join, é uma Merda!

Ex: usando inner join 

SELECT     imovel.cod, 
           imovel.referencia, 
           medias.idmedia, 
           medias.txtpath, 
           h.txatividade 
FROM      [hfbimoveis-bkp].[dbo].[tabImovel] imovel 
INNER JOIN tabmedia medias 
ON         ( 
                      imovel.cod = medias.codimovel) 
INNER JOIN tabimovelhistorico H 
ON         h.codimovel = imovel.cod 
WHERE      imovel.cod = 1133 FOR json auto

[
{"cod":1133,
"referencia":"CL107",
"medias":[
{
"idMedia":3925,
"txtPath":"Cittá Fachadas (4)_640x480.jpg",

"H":[
{"txAtividade":"Cadastrou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"}]}]}]

Olha oque aconteceu? O meu historico foi parar dentro das MEDIAS! Errado neh

Por isso, é preferível fazer usando select, dentro de select

SELECT imovel.cod, 
       imovel.referencia, 
       ( 
              SELECT m.idmedia, 
                     m.txtpath 
              FROM   tabmedia M 
              WHERE  m.codimovel = imovel.cod FOR json auto) AS m, 
       ( 
              SELECT h.txatividade 
              FROM   tabimovelhistorico AS h 
              WHERE  h.codimovel = imovel.cod FOR json auto) AS h 
FROM   [hfbimoveis-bkp].[dbo].[tabImovel] imovel 
WHERE  imovel.cod = 1133 FOR json auto

[
{"cod":1133,
"referencia":"CL107",
"m":[{"idmedia":3925,"txtpath":"Cittá Fachadas (4)_640x480.jpg"}],
"h":[
{"txatividade":"Cadastrou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"}]
}]

As medias ficaram em 1 linha, e os historicos ficaram em outra linha!

Espero que isso ajude, tanto quanto me ajudou ;-)

 

22/07/2015 Database / querys

 

$latitude = -23.0006704;
$longitude = -43.3921967;

SELECT
    colaboradores.id, colaboradores.latitude, colaboradores.longitude, colaboradores.cidade,
    
    CAST(
          6371 
          * acos (
          cos(radians( $latitude )) *
          cos(radians( colaboradores.latitude)) *
          cos(radians( colaboradores.longitude) - 
          radians( $longitude )) +
          sin(radians( $latitude )) *
          sin(radians(colaboradores.latitude))
        )
    AS UNSIGNED) AS distance,    
    
    GROUP_CONCAT(telefones.numero) as telefone, 
    GROUP_CONCAT(operadoras.txtOperadora) as operadora,
    (SELECT GROUP_CONCAT(colaboradores_servicos.servico_id) from odete.colaboradores_servicos where colaboradores_servicos.colaborador_id in (colaboradores.id)) as idServico,
    (SELECT GROUP_CONCAT(servicos.txtServico) from odete.servicos inner join odete.colaboradores_servicos on colaboradores_servicos.servico_id = servicos.id where colaboradores_servicos.colaborador_id in (colaboradores.id)) as servico
        
FROM (odete.colaboradores)
        
    INNER JOIN odete.telefones ON colaboradores.id = telefones.colaborador_id
    INNER JOIN odete.operadoras ON operadoras.id = telefones.operadora_id        

WHERE tipo_colaborador =  'COLABORADOR'

GROUP BY colaboradores.id

Having distance < 100;

 

17/07/2015 Database / querys

I was developing a query that returns the records from the website database Odete.me

I'm heavily using GROUP_CONCAT because I want the result to be grouped in one line.

After I did the query, I had to turn into query CODEGNITER because it is the framework that I'm using.

MYSQL QUERY

SELECT
    colaboradores.id,
    GROUP_CONCAT(telefones.numero) as telefone, 
    GROUP_CONCAT(operadoras.txtOperadora) as operadora,
    (SELECT GROUP_CONCAT(colaboradores_servicos.servico_id) from odete.colaboradores_servicos where colaboradores_servicos.colaborador_id in (colaboradores.id)) as idServico,
    (SELECT GROUP_CONCAT(servicos.txtServico) from odete.servicos inner join odete.colaboradores_servicos on colaboradores_servicos.servico_id = servicos.id where colaboradores_servicos.colaborador_id in (colaboradores.id)) as servico
        
FROM (odete.colaboradores)
        
    INNER JOIN odete.telefones ON colaboradores.id = telefones.colaborador_id
    INNER JOIN odete.operadoras ON operadoras.id = telefones.operadora_id
        
WHERE tipo_colaborador =  'COLABORADOR'
GROUP BY colaboradores.id

CODEGNITER QUERY

            $this->db->select('colaboradores.id, colaboradores.nome, colaboradores.sobrenome, colaboradores.email, colaboradores.uf, colaboradores.cidade, colaboradores.bairro, colaboradores.valor, colaboradores.idfacebook, GROUP_CONCAT(telefones.numero) as telefone, GROUP_CONCAT(operadoras.txtOperadora) as operadora, (SELECT GROUP_CONCAT(colaboradores_servicos.servico_id) from colaboradores_servicos where colaboradores_servicos.colaborador_id in (colaboradores.id)) as idServico, (SELECT GROUP_CONCAT(servicos.txtServico) from odete.servicos inner join colaboradores_servicos on colaboradores_servicos.servico_id = servicos.id where colaboradores_servicos.colaborador_id in (colaboradores.id)) as servico');
            $this->db->from('colaboradores');
            $this->db->join('telefones', 'colaboradores.id = telefones.colaborador_id', 'inner');
            $this->db->join('operadoras', 'operadoras.id = telefones.operadora_id', 'inner');
            $this->db->where('tipo_colaborador', 'COLABORADOR');
            $this->db->group_by('colaboradores.id');
            $query = $this->db->get()->result();

            foreach ($query as $row){
                 $row->operadora = explode(",", $row->operadora);
                 $row->telefone = explode(",", $row->telefone);
                 $row->servico = explode(",", $row->servico);
                 $row->idServico = explode(",", $row->idServico);
            }

echo json_encode($query);

http://odete.me

 

 

25/05/2015 Database / mongodb

In my last implementation using mongodb and nodejs, i need to return an object JSON for aplication with total records found.

var result = {
total: 1233323;
rows: [object,object,object,object]
}

My solution:

  var total = Publication.find().count(function(e, count){

    Publication.find(filter, function(err, data){
      var result = {
        totalNumberOfEntries : count,
        rows: data
      }
      callback(err, result);
    }).limit(pageSize).skip(pageNumber)
  });

 

I do two requests in mongodb.

The first request, return the total, and in the callback return a second request with total records found and total rows found.

09/03/2014 Database / sql server

http://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/

11/01/2013 Database / sql server

SQL State: 08001, SQL Error Code :17
[DBNETLIB][ConnectionOpen(Connect()).]SQL Server inexistente ou acesso negado.

SOLUÇÃO:

Para resolver este problema:
****************************************************************************
Temos que informar o nome da instância do SQL Server Express.
****************************************************************************

O Sql Server Express, na instalação default, cria uma instância chamada SQLEXPRESS. Estas instância também podem ser criadas nas demais versões do Sql Server, mas isto não vem ao caso para solução do tópico, sugiro ler um pouco mais sobre instâncias do Sql Server.

Para acessar a instância, no campo HostName do DBExpress, além do host, incluia o nome da instância, da seguinte forma:
HostName = *NomeDaMáquina*\SQLEXPRESS

 

01/11/2012 Database / oracle

Para testar a conexão de modo rápido...Estou coloando aqui para não esquecer desse macetezinho!

  • Botão direito - Novo - Documento de Texto
  • Renomeie para Conexao.udl
  • Plaaaaaaaaaay!

 

25/09/2012 Database / oracle

Pra nunca mais esquecer essa parada!!!!

GRANT ALL ON "TABELAQUEVAIRECEBERPERMISSAO" TO "SCHEMAQUEVAISERUTILIZADO"

GRANT ALL ON IMS_COMMON.ENV_CLIENTE_GRUPO TO IMS_MESA;
GRANT ALL ON IMS_COMMON.ENV_GRUPO TO IMS_MESA;
GRANT ALL ON CORRWIN.TSCCLICC TO IMS_MESA;           
GRANT ALL ON CORRWIN.TSCCLIGER TO IMS_MESA; 

 

21/09/2012 Database / oracle

No oracle, campos do tipo RAW servem para guardar registros do tipo GUID

Dei uma pesquisada e o correto de cadastrar um campo GUID no oracle é deixa-lo do tipo RAW(16) ou RAW(32).

 

Ele já vai fazer o mapeamento como GUID e não vai ter que ficar fazendo parse para String quando quiser comparar com outro campo do tipo guid.

 

Exemplo de inserção , basta usar o SYS_GUID()

INSERT INTO tabela VALUES (ims_common.Sq_Env_Propriedades_Grupo.nextval, 3, SYS_GUID());

 

 

06/09/2012 Database / oracle

O erro de PLSQL ORA-00947 Not Enough Values, é bem simples de ser resolvido. Ele diz o que acontece literalmente em ingles. “Não há valores suficientes”. Ou seja, quando se faz um INSERT que deve ser informada 3 colunas, mas nos valores só vão 2, esse erro ocorre, como no exemplo abaixo:
insert into cliente(id_cliente, nome, rg) values(1, ‘Joaozinho’);

O comando insert deixa claro que são 3 colunas a serem identificadas, mas só duas estão preenchidas no values. Isso acontece também com insert select, como abaixo:

insert into cliente(id_cliente, nome, rg) select id_cliente, nome from cliente_temp;

Para esses comandos não resultar em erro, é só adicionar a coluna ficando dessa forma:

insert into cliente(id_cliente, nome, rg) values(1, ‘Joaozinho’, ’12345678-9′);

insert into cliente(id_cliente, nome, rg) select id_cliente, nome, rg from cliente_temp;

 

05/08/2012 Database / sql server

CREATE FUNCTION FormatDinheiro(@Valor DECIMAL(20, 2))
RETURNS VARCHAR(30)
AS BEGIN
DECLARE
@ValorStr VARCHAR(30),
@Inteiro VARCHAR(30),
@Decimal VARCHAR(3),
@I INT,
@Count INT,
@IntLen INT

SET @ValorStr = CONVERT(VARCHAR(30), @Valor)

SET @ValorStr = RTRIM(LTRIM(REPLACE(@ValorStr, '.', '')))
SET @ValorStr = REPLACE(@ValorStr, ',', '')
SET @Inteiro = ''

IF (Len(@ValorStr) = 1)
BEGIN
SET @Inteiro = '0'
SET @Decimal = '0'+@ValorStr
END
ELSE
BEGIN
IF (Len(@ValorStr) = 2)
BEGIN
SET @Inteiro = '0'
SET @Decimal = @ValorStr
END
ELSE
BEGIN
SET @Decimal = Substring(@ValorStr, (Len(@ValorStr)-1), Len(@ValorStr))
SET @I = 3
SET @Count = 0
WHILE (@I <= Len(@ValorStr))
BEGIN
IF (@Count = 3)
BEGIN
SET @Inteiro = '.'+@Inteiro
SET @Count = 0
END
SET @IntLen = (Len(@ValorStr)+1)-@I
IF (@IntLen >= 0)
BEGIN
SET @Inteiro = Substring(@ValorStr, @IntLen, 1)+@Inteiro
END
SET @I = @I + 1
SET @Count = @Count + 1
END
END
END
IF (@Inteiro = '') SET @Inteiro = '0'
IF (@Decimal = '') SET @Decimal = '00'
RETURN @Inteiro+','+@Decimal
END

 

29/09/2010 Database / access

Alem de mim, mtos amigos teem dito problema com seus projetos no Windows Vista. :-(

O lance eh a conexao com o Access, ainda naum foi lancado um Driver especifico pra versao 64bits.

A solucao eh a seguinte:

vá para Ferramentas Administrativas> Internet Information Services (IIS). Então vá para "pools de aplicativos" e selecione qualquer aplicativo usa o pool aplicativo do ASP.NET. Clique em "Advanced Settings ..." e definir "Enable-aplicativos 32 bits." Agora o AppPool será usar o de 32 bits.

 

14/01/2010 Database / access

Estava eu terminando meu sistema de gerenciamento de Laudos, quando me deparei com a seguinte situação:

Todos os campos da tabela estavam legais, estruturados, formatados de acordo com seus valores e tipos.

Moeda, ficava como Moeda, data = Data e assim por diante.

Campos do tipo Moeda, gravam da seguinte maneira.

R$ 5,00 = ficaria como 5 e depois eu teria que usar o FormatCurrency para formata-lo na tela. Não queria formatar na tela, queria que o resultado da consulta SQL já me trouxesse os resultafos formatadas, pois assim, a aplicação só teria o trabalho de printar os valores.

SOLUÇÃO:

Select Format(valor, "Currency") as valor from tabela

14/01/2010 Database / querys

DELETE from base_emails WHERE nome IN (SELECT MAX(nome) FROM base_emails GROUP by nome HAVING COUNT(nome)>1);

 

14/01/2010 Database / querys

select nome, count(nome) from base_emails group by nome having count(nome)>1

 

03/11/2008 Database / querys
  1. Select para localizar duplicados
        select campo,campo1,count(*)
         from tabela having count(*) > 1
        group by campo,campo1
  2. Como deletar duplicados
       delete from tab p1
       where rowid < (select max(rowid)
                        from tab1 p2
                       where p1.primary_key = p2.primary_key);
28/05/2008 Database / access

Dia desses pensei num Menu Recursivo, até que funciona legal, mas meu amigo Rodnei, me enviou um select que faz o menu em uma unica linha

select x.txtCategoria from tabMenu x left join  tabMenu y on x.codtxtCategoria = y.idMenu order by x.idMenu

valeu Manooooooooooooow!!!!!!!!!

24/03/2008 Database / access

Tá ai uma coisa chata, você fazer um sisteminha em access mesmo e toda hora de abrir o arquivo Mdb aparacer aquele aviso de segurança.Pra tirar aquilo baixe o nível de segurança.

Menu Ferramentas - Macro - Segurança - baixar nível