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

SQL Server

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?
Bruno

Bruno

Curtidas 0

Melhor post

Geovane Junior

Geovane Junior

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.
GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

12/04/2020

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
GOSTEI 0
Bruno

Bruno

12/04/2020

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)

GOSTEI 0
Bruno

Bruno

12/04/2020

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.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/04/2020

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

GOSTEI 1
Emerson Nascimento

Emerson Nascimento

12/04/2020

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
GOSTEI 1
Bruno

Bruno

12/04/2020

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