Respondido juntas informaçoes

  • quinta-feira, 22 de março de 2012 20:59
     
     

    Prezados boa tarde!

    vejam se o possivel,

    SQL

    SELECT
    A.IDOBJOF     AS 'Objeto$',
    I.VALORMEDIDOR2 AS 'KM Entrada',
    I.VALORMEDIDOR1 AS  'HM Entrada',
    I2.VALORMEDIDOR2 AS 'KM Saida',
    I2.VALORMEDIDOR1 AS 'H Saida',
    I2.VALORMEDIDOR2 - I.VALORMEDIDOR2 AS 'Total_KM',
    I2.VALORMEDIDOR1 - I.VALORMEDIDOR1 AS 'Total_HM'

     FROM OFOBJOFICINA          AS  O   (NOLOCK)
    INNER JOIN OFMODELO         AS  M   (NOLOCK) ON  M.IDTIPOOBJ  = O.IDTIPOOBJ AND M.CODMODELO = O.CODMODELO
    INNER JOIN OFSUBMODELO      AS  S   (NOLOCK) ON O.IDTIPOOBJ   = M.IDTIPOOBJ AND S.CODMODELO = O.CODMODELO
    AND S.CODSUBMODELO = O.CODSUBMODELO
    INNER JOIN OFSTATUSEQP      AS  F1  (NOLOCK) ON F1.CODCOLIGADA = O.CODCOLIGADA AND F1.CODSTATUS = O.STATUS
    INNER JOIN OFHISTOBJFILHO   AS  A   (NOLOCK) ON A.CODCOLIGADA  = O.CODCOLIGADA AND A.IDOBJOF = O.IDOBJOF
    INNER JOIN OFPOSICAOFILHO   AS  P   (NOLOCK) ON P.CODPOSICAOFILHO = A.CODPOSICAOFILHO
    LEFT JOIN  OFMOTIVORETIRADAOBJFILHO AS T ON T.CODMOTIVORET = A.CODMOTIVORET
    INNER JOIN OFHISTINDICADOR  AS  I   (NOLOCK) ON I.IDHISTINDICADOR =  A.IDHISTINDICADORENTRADA
    AND I.CODCOLIGADA = A.CODCOLIGADA AND I.IDOBJOF = A.IDOBJOFPAI
    INNER JOIN OFHISTINDICADOR  AS  I2   (NOLOCK) ON I2.IDHISTINDICADOR =  A.IDHISTINDICADORsaida
    AND I2.CODCOLIGADA = A.CODCOLIGADA AND I2.IDOBJOF = A.IDOBJOFPAI

    WHERE O.IDTIPOOBJ = '14'
    AND A.CODMOTIVORET IN ('3','4')
    and A.IDOBJOF in ('1233')
    ORDER BY M.MODELO   ,S.DESCRICAO

    resultado

    Objeto   KM Entr       KM Saida      TOTAL  KM          HM Entr     HM Saida     TOTAL HM

    1233     21559.00    27826.00      6267.00               0               0                0

    Aos Feras de SQl, ai vem minha duvida, essas infomaçoes KM e HM, nunca vao se repetir,  eu preciso que de uma forma que quanto tivesse valor eu traria no meu exemplo somente tenho os KM, so traria essa KM, conforme o exemplo abaixo.

    informações viessem da forma abaixo:

    Objeto   KM Entr       KM Saida      TOTAL  KM

    1233     21559.00    27826.00      6267.00   

    sera que tem como fazer essa magica.

    obrigado a todos 

Todas as Respostas

  • sexta-feira, 23 de março de 2012 19:12
    Moderador
     
     

    Ronnie,

    Se entendi bem, quando determinado campo existir informações, voce não quer que outros sejam visualizados, agora, se o mesmo não existir, deve-se visualizar os outros.

    Isso é possivel em parte.

    Por que não da: O SQL Server trabalha de forma tabular, ou seja, o numero de colunas deve ser identico para todas as linhas de um select, se não, voce teria linhas com menos colunas, perdendo a caracteristica de tabela

    Como é possivel: Ao invez de trazer uma coluna ou outra, voce cria uma mista, e traz as informações que precisa nela, exemplo:

    SELECT Nome,

    CASE

    WHEN Sobrenome IS NULL THEN CampoIdCliente

    ELSE Sobrenome END As segundoValor

    FROM Tabela


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

  • terça-feira, 27 de março de 2012 14:39
     
     Respondido Contém Código

    De acordo com sua explicação creio que o coalesce resolve teu problema.

    SELECT
    A.IDOBJOF     AS 'Objeto$',
    coalesce(I.VALORMEDIDOR2, I.VALORMEDIDOR1) AS "Entrada",
    coalesce(I2.VALORMEDIDOR2, I2.VALORMEDIDOR1) AS "Saida",
    (coalesce(I2.VALORMEDIDOR2, I2.VALORMEDIDOR1) - 
    coalesce(I.VALORMEDIDOR2, I.VALORMEDIDOR1)) as "Total"
     FROM OFOBJOFICINA          AS  O   (NOLOCK)
    INNER JOIN OFMODELO         AS  M   (NOLOCK) ON  M.IDTIPOOBJ  = O.IDTIPOOBJ AND M.CODMODELO = O.CODMODELO
    INNER JOIN OFSUBMODELO      AS  S   (NOLOCK) ON O.IDTIPOOBJ   = M.IDTIPOOBJ AND S.CODMODELO = O.CODMODELO
    AND S.CODSUBMODELO = O.CODSUBMODELO
    INNER JOIN OFSTATUSEQP      AS  F1  (NOLOCK) ON F1.CODCOLIGADA = O.CODCOLIGADA AND F1.CODSTATUS = O.STATUS
    INNER JOIN OFHISTOBJFILHO   AS  A   (NOLOCK) ON A.CODCOLIGADA  = O.CODCOLIGADA AND A.IDOBJOF = O.IDOBJOF
    INNER JOIN OFPOSICAOFILHO   AS  P   (NOLOCK) ON P.CODPOSICAOFILHO = A.CODPOSICAOFILHO
    LEFT JOIN  OFMOTIVORETIRADAOBJFILHO AS T ON T.CODMOTIVORET = A.CODMOTIVORET
    INNER JOIN OFHISTINDICADOR  AS  I   (NOLOCK) ON I.IDHISTINDICADOR =  A.IDHISTINDICADORENTRADA
    AND I.CODCOLIGADA = A.CODCOLIGADA AND I.IDOBJOF = A.IDOBJOFPAI
    INNER JOIN OFHISTINDICADOR  AS  I2   (NOLOCK) ON I2.IDHISTINDICADOR =  A.IDHISTINDICADORsaida
    AND I2.CODCOLIGADA = A.CODCOLIGADA AND I2.IDOBJOF = A.IDOBJOFPAI
    
    WHERE O.IDTIPOOBJ = '14'
    AND A.CODMOTIVORET IN ('3','4')
    and A.IDOBJOF in ('1233')
    ORDER BY M.MODELO   ,S.DESCRICAO

    Boa Sorte !

    Antero

    • Marcado como Resposta Ronnie Von terça-feira, 27 de março de 2012 18:31
    •  
  • terça-feira, 27 de março de 2012 18:32
     
     

    Parabens Pessoal. Fiz conforme o exemplo do Antero, Obrigado