Jump to content
soaresmetal

Query que cria colunas automaticamente

Recommended Posts

Preciso criar um relatório usando T-SQL onde os resultados das colunas sejam preenchidos automaticamente.

 

Exemplo:

Cód | Cliente | Venda jan/18 | Venda fev/18 | Venda mar/18 | ...

 

As linhas representam os clientes e suas vendas mensais as colunas vão sendo criadas a medida que o tempo for passando e novos dados forem surgindo.

 

Seria interessante possuir também um limitador de período.

Por exemplo: criar o relatório apenas até agosto/19.

 

Suponha as tabelas:
clientes - contendo dados cadastrais dos clientes
pedidos - contendo informações dos pedidos, datas e totais gerais
itens - itens do pedido e confirmação de faturamento ou não do item

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Webster Moitinho
      Estou tentando fazer o controle de acesso do meu site. Para tanto criei duas tabelas:
      Stat (Armazena cada sessao dos usuários
      Estrutura da tabela `stat`
      CREATE TABLE `stat` ( `id_stat` int(11) NOT NULL, `navegador` varchar(85) NOT NULL, `usuario` int(11) NOT NULL, `cep` varchar(7) NOT NULL, `ip_visitante` varchar(15) NOT NULL, `sessao` varchar(72) NOT NULL, `pais` varchar(30) NOT NULL, `estado` varchar(30) NOT NULL, `cidade` varchar(50) NOT NULL, `latitude` decimal(11,5) NOT NULL, `longitude` decimal(11,5) NOT NULL, `ip_meuservidor` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(175) NOT NULL, `idioma` varchar(50) NOT NULL, `SERVER_ADMIN` varchar(90) NOT NULL, `servidor` varchar(90) NOT NULL, `visitada` longtext CHARACTER SET utf8 NOT NULL, `registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Indexes for table `stat` ALTER TABLE `stat` ADD PRIMARY KEY (`id_stat`); -- AUTO_INCREMENT for table `stat` ALTER TABLE `stat` MODIFY `id_stat` int(11) NOT NULL AUTO_INCREMENT; sub_stat (Para armazenar as páginas visitadas e as interações com o cliente:
      CREATE TABLE `sub_stat` ( `id_substat` int(11) NOT NULL, `sessao` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(85) NOT NULL, `visitada` varchar(85) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Indexes for table `sub_stat` ALTER TABLE `sub_stat` ADD PRIMARY KEY (`id_substat`); -- AUTO_INCREMENT for table `sub_stat` ALTER TABLE `sub_stat` MODIFY `id_substat` int(11) NOT NULL AUTO_INCREMENT; O desejado portanto, seria que quando o usuário entrasse na página, o script localizasse a sessão do usuário, buscaria a sessão na tabela stat, caso não existisse, iria inserir o registro tanto na tabela stat, quanto na tabela sub_stat. Se existisse a sessão na tabela stat, então somente haveria inserção dos registros na tabela sub_stat. Eu não estou conseguindo executar a segunda consulta, que vai popular a tabela sub_stat.
       
      Meu código está assim:
       
      $sql = "SELECT sessao FROM stat WHERE sessao = '$sessao'"; $prepara = $PDO->prepare( $sql ); $prepara->execute(); $login_check = $prepara->rowCount(); if($login_check < 1){ $sql = "INSERT INTO `stat` (`id_stat`, `navegador`, `usuario`, `cep`, `ip_visitante`, `sessao`, `pais`, `estado`, `cidade`, `latitude`, `longitude`, `ip_meuservidor`, `hora_req`, `origem`, `idioma`, `servidor`, `visitada`, `registro`) VALUES (NULL, '$navegador', '$usuario', '$cep', '$meuip', '$sessao', '$pais', '$estado', '$cidade', '$lat', '$long', '$ip', '$hora_req', '$origem', '$idioma', '$servidor', '$visitada', '$registro')"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); $sql2 = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile2 = $PDO->prepare($sql2); $vai = $compile2->execute(); } else { $sql = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); }  
    • By GuiPetenuci
      Boa tarde,
      Estou com um problema e estou ficando louco, ja li praticamente todos as respostas de View de SQL Server no Stack Overflow e a maioria da documentacao da MSFT
       
      Tenho uma view que faz algumas queries malucas que o cliente precisa, mas ela nao retorna o resultado justo, e se eu pegar o codigo e fazer uma query simples com o codigo, o resultado è ok.
       
      Codigo da View
      SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /****** Object:  View [QEHS].[V_FactMonitorings25261gui]    Script Date: 11/07/2019 16:24:53 ******/ CREATE view      [QEHS].[V_FactMonitorings25261gui] as      with     Plants as      (         select distinct              [plant-id]          from              [QEHS].[Fact-Monitorings-H&S]                 ) ,      MIDs as      (         select mid          from          (             values                 ( 'MON.02.25 Total number of LTA free days (calendar days)')                 ,( 'MON.02.26 Total number of TRI free days (calendar days)')          ) as x(mid)      ),      PlantList      AS     (         select              a.date,              b.[plant-id],              c.mid         from              QEHS.Calendar_Gen A              cross join              plants b                 cross join mids c         where              year(a.date) >= 2011     ),      help1 as      (         SELECT              p.date,              p.[plant-id],             p.mid,              t.value,             (             case                  when (year(p.date) = year(getdate()) and month(p.date) = month(getdate())) then                      day(getdate())                  else                      iif(t.value is not null, 0, day(eomonth(p.date)))                             end                           ) Days,              cast(isnull(cast(t.value as bit),0) as integer) reset          FROM              PLANTLIST p              left join              [QEHS].[Fact-Monitorings-H&S] T             on             (                  p.date = t.date and                   p.[plant-id] = t.[plant-id] and                   p.mid = t.[monitoring-id]              )                  ),      help2 as      (         select              date,              [plant-id],              mid,              value,              days,              reset,             formatmessage('%s%s%d', [plant-id], mid,sum(reset) over                  (                      partition by  [plant-id], mid                      order by  date, [plant-id], mid                 )             ) grp         from             help1          where              year(date) >= (select year(min(date)) from [QEHS].[Fact-Monitorings-H&S])             ),     help3 as      (         select              date,              [plant-id],              mid,              value,              days,              first_value(value) over (partition by grp order by date, [plant-id], mid) fullvalue         from              help2      )      --      select          date,          [plant-id],          mid,          isnull(a.Value,              fullvalue +sum(days) over              (                  partition by [plant-id], mid, fullvalue                   order by  mid, date, [plant-id]                  rows between unbounded preceding and current row             )          ) total     from          help3 a          GO a view retorna assim:

       
      Agora se eu pegar e fazer a query "na mao", retorna assim, que è o justo:

       
      Agora, porque na view retorna um e a query retorna outro? o.o
    • By CharlieAldrin
      Estou tentando fazer o seguinte codigo, onde ele pega alguns dados e salva eles em uma tabela, porém o INSERT não está salvando os dados, tem algo errado? 
       
      <?php
      session_start();
      include('config.php');
      //  id1
      // recebe pela url
      $id_busca_ajuda = $_GET['id']; 
      // id2
      // recebe pela url
      $nick_busca_ajuda = $_GET['nick']; 
      $id_ajudante = $_SESSION['usuario'];
      // nick 2
      $database = new Database();
      $db = $database->getConnection();
      $query = $db->prepare("SELECT nick_ajudante FROM sala_ajudante WHERE id_usuario_ajudante=".$_SESSION['usuario']);
      $runAjudante = $query->execute();
      $linha = $query->fetch(PDO::FETCH_ASSOC); 
      $nick_ajudante = $linha['nick_ajudante']; 
      // linha que não estpa funcionando
       $query =  $db->prepare("INSERT INTO conversa ('nick1', 'nick2', 'id1', 'id2', 'online') VALUES ('".$nick_busca_ajuda."' , '".$nick_ajudante."' , '".$id_busca_ajuda."' , '".$id_ajudante."' , '1');"); 
      $runConv = $query->execute();

      ?>
    • By manoaj
      Boa tarde pessoal!
      Tenho As seguintes tabelas no meu banco:
       
      Tabela->clientes(Essa tabela guarda os clientes)
      Tabela-> Produtos (Essa tabela guarda os  produtos)
      Tabela -> Tamanhos (Essa tabela guarda os tamanhos e os preços)
      Tabela->Relação de tamanho (Essa tabela guarda a relação dos tamanhos que cada produto pode ter)
      Tabela-> Pedidos (Essa tabela guarda o pedido do cliente com tamanho e quantidade)
       
      E o problema e o seguinte: Como q eu faço uma seleção nessas tabelas para saber o valor total do pedido do meu cliente com base no tamanho e quantidade escolhida?
    • By RAFAEL HENRIQUE DE SOUZA
      Boa noite pessoal. 

      Estou com um problema e não consegui sair do lugar, tenho uma tabela de documentos (id, doc, path, ext, id_cli) e outra tabela de controle contendo o Id_documento, tipo_doc, data_criacao.
      Preciso informar se o documento listado ja foi substituído.
      A regra é a seguinte: Para o documento de mesmo cliente e mesmo tipo ele compara as datas alimentando a coluna de status para o mais recente e substituído par os demais.
      Segue o código para ajuda.

      create table `tb_documento` (
          `ID_DOCUMENTO` int (11),
          `DOCUMENTO` varchar (60),
          `PATH` varchar (60),
          `EXTENCAO` varchar (15),
          `ID_CLIENTE` int (11)
      ); 
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('1','TESTE1','C:\\DOCUMENTOS','PDF','1');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('2','TESTE DOC','C:\\DOCUMENTOS','XLS','1');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('3','ASLJDBASIHD','C:\\DOCUMENTOS','XLS','1');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('4','EXTREME','C:\\DOCUMENTOS','PDF','1');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('5','TESTE NOVO','C:\\DOCUMENTOS','DOC','2');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('6','WIN','C:\\DOCUMENTOS','DOC','2');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('7','XTREME','C:\\DOCUMENTOS','PDF','2');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('8','SAMSUNG','C:\\DOCUMENTOS','XLS','2');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('9','CPD','C:\\DOCUMENTOS','DOC','3');
      insert into `tb_documento` (`ID_DOCUMENTO`, `DOCUMENTO`, `PATH`, `EXTENCAO`, `ID_CLIENTE`) values('10','QQWAS','C:\\DOCUMENTOS','PDF','4');
      -------------------------------------------------------------------------------------
      create table `tb_tipo_documento` (
          `ID_TIPO` int (11),
          `ID_DOCUMENTO` int (11),
          `DATA_CRIACAO` datetime 
      ); 
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','1','2019-06-23 18:18:15');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('3','2','2019-06-24 18:19:52');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('2','3','2019-06-19 18:20:22');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('4','9','2019-06-11 18:31:21');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('4','10','2019-06-07 18:31:44');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('5','5','2019-06-26 18:32:15');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','4','2019-06-03 18:32:21');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','6','2019-06-01 18:36:17');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('3','7','2019-06-14 18:36:35');
      insert into `tb_tipo_documento` (`ID_TIPO`, `ID_DOCUMENTO`, `DATA_CRIACAO`) values('1','8','2019-06-20 18:36:59');
      ------------------------------------------------------------------------

      Modelo de resultado esperado:
      SELECT 
          TD.*,
          TTP.ID_TIPO,
          TTP.DATA_CRIACAO,
          '' AS 'STATUS'
      FROM 
          TB_DOCUMENTO TD
      LEFT JOIN 
          TB_TIPO_DOCUMENTO TTP ON TTP.ID_DOCUMENTO = TD.ID_DOCUMENTO;
      ----------------------------------------------------------------------
      Pessoal muito obrigado, qualquer ajuda é bem vinda!
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.