Retornar apenas uma linha no Sql Server porém que traga todos os campos preenchidos.

12/04/2020

0

Tenho uma rotina que cria algumas linhas na minha tabela, essa tabela possui um campo chave "ID" e outras colunas que vou chamar de Coluna1, Coluna2, Coluna3 até Coluna10.

Na primeira linha eu tenho as colunas (Coluna1, Coluna10) preenchidas e as demais NULL, já na segunda linha tenho por exemplo as colunas (Coluna4 e Coluna6) com valores.

Então preciso retornar apenas uma linha que contenha as colunas preenchidas, Como fazer um select nessa tabela?
Bruno

Bruno

Responder

Post mais votado

12/04/2020

Tenho uma rotina que cria algumas linhas na minha tabela, essa tabela possui um campo chave "ID" e outras colunas que vou chamar de Coluna1, Coluna2, Coluna3 até Coluna10.

Na primeira linha eu tenho as colunas (Coluna1, Coluna10) preenchidas e as demais NULL, já na segunda linha tenho por exemplo as colunas (Coluna4 e Coluna6) com valores.

Então preciso retornar apenas uma linha que contenha as colunas preenchidas, Como fazer um select nessa tabela?


Fala Bruno beleza? Man não sei se entendi bem, mas acho que você colocar os dados nas colunas separadamente, mas precisa que esses dados venham todos juntos na mesma coluna.
Se for isso mesmo e esse ID que você coloca seja digamos o que agrupa tudo o que você colocou você pode usar essa query quero que o emerson te passou colocando um where ID = "valor" no final dessa forma vai trazer apenas uma linha com os dados preenchidos como você precisa.

SELECT
ID, max(Variable1) CPO1, max(Variable2) CPO2, max(Variable3) CPO3, max(Variable4) CPO4, max(Variable5) CPO5, max(Variable6) CPO6, max(Variable7) CPO7, max(Variable8) CPO8, max(Variable9) CPO9, max(Variable10) CPO10
FROM
TABELA_DADOS
WHERE
(DateTime BETWEEN '2020-04-11 00:44:01' AND '2020-04-11 23:59:59')
AND
ID = <valordoID>
GROUP BY ID

Agora se esse ID não for o agregador de informações você vai precisar alterar essa rotina para que ela insira alguma coluna que agregue esses dados para você de alguma forma.

Geovane Junior

Geovane Junior
Responder

Mais Posts

12/04/2020

Emerson Nascimento

pra deixar claro: você precisa trazer a linha onde todos os campos estão preenchidos?
ou você precisa trazer um linha, mesclando os campos, de modo que apresente uma linha com todos os campos preenchidos?

no primeiro caso:
SELECT
  *
FROM
  TABELA
WHERE
  (NOT CAMPO1 IS NULL)
  AND (NOT CAMPO2 IS NULL)
  AND (NOT CAMPO3 IS NULL)
  ... ATÉ O CAMPO10


para o segundo caso:
SELECT
  max(CAMPO1) CPO1,
  max(CAMPO2) CPO2,
  max(CAMPO3) CPO3,
  ATÉ O CAMPO10
FROM
  TABELA

não entendi porque citou o campo ID
Responder

12/04/2020

Bruno

pra deixar claro: você precisa trazer a linha onde todos os campos estão preenchidos?
ou você precisa trazer um linha, mesclando os campos, de modo que apresente uma linha com todos os campos preenchidos?

no primeiro caso:
SELECT
  *
FROM
  TABELA
WHERE
  (NOT CAMPO1 IS NULL)
  AND (NOT CAMPO2 IS NULL)
  AND (NOT CAMPO3 IS NULL)
  ... ATÉ O CAMPO10


para o segundo caso:
SELECT
  max(CAMPO1) CPO1,
  max(CAMPO2) CPO2,
  max(CAMPO3) CPO3,
  ATÉ O CAMPO10
FROM
  TABELA

não entendi porque citou o campo ID




Emerson, primeiramente muito obrigado pelo retorno, seria o segundo caso mesmo, o único ponto é que essa query está retornando apenas uma linha, eu preciso que retorne uma linha para cada ID = exemplo meu campo ID pode ter duas ou mais linhas ai nesse caso preciso trazer todos os ID's. Como minha busca é por data, preciso que naquele dia traga todos os ID's e seus respsctivos Max(Campo)

Responder

12/04/2020

Bruno

Emerson, primeiramente muito obrigado pelo retorno, seria o segundo caso mesmo, o único ponto é que essa query está retornando apenas uma linha, eu preciso que retorne uma linha para cada ID = exemplo meu campo ID pode ter duas ou mais linhas ai nesse caso preciso trazer todos os ID's. Como minha busca é por data, preciso que naquele dia traga todos os ID's e seus respsctivos Max(Campo)

Meu select

SELECT max(Variable1) CPO1, max(Variable2) CPO2, max(Variable3) CPO3, max(Variable4) CPO4, max(Variable5) CPO5, max(Variable6) CPO6, max(Variable7) CPO7, max(Variable8) CPO8, max(Variable9) CPO9, max(Variable10) CPO10 FROM TABELA_DADOS
WHERE (DateTime BETWEEN '2020-04-11 00:44:01' AND '2020-04-11 23:59:59')

Esse select retorna apenas 1 linha, com o max(campo) de toda a tabela.
Responder

12/04/2020

Emerson Nascimento

ah, sim.
então acredito que baste:
SELECT
  ID,
  max(CAMPO1) CPO1,
  max(CAMPO2) CPO2,
  max(CAMPO3) CPO3,
  ATÉ O CAMPO10
FROM
  TABELA
GROUP BY
  ID

Responder

12/04/2020

Emerson Nascimento

SELECT
  ID,
  max(Variable1) CPO01,
  max(Variable2) CPO02,
  max(Variable3) CPO03,
  max(Variable4) CPO04,
  max(Variable5) CPO05,
  max(Variable6) CPO06,
  max(Variable7) CPO07,
  max(Variable8) CPO08,
  max(Variable9) CPO09,
  max(Variable10) CPO10
FROM
  TABELA_DADOS
WHERE
  (DateTime BETWEEN '2020-04-11 00:44:01' AND '2020-04-11 23:59:59')
GROUP BY
  ID
Responder

12/04/2020

Bruno

Muito obrigado pessoal utilizei o exemplo do Emerson e funcionou corretamente como esperado. Muito Obrigado a todos.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar