Pergunta

Meu chefe me deu uma tarefa que eu não tenho certeza é possível desde que após cerca de duas semanas, eu não consigo descobrir uma solução, então eu estou jogando isso para pedir qualquer tipo de ajuda do SO grupo. Se isso quebra o seu cérebro, peço desculpas.

Um pouco de fundo em primeiro lugar: Nós desenvolvemos uma aplicação de consulta de banco de dados que permite aos usuários receber de volta tudo o que quiserem do banco de dados sem ter que saber qualquer SQL.

Meu Problema: Queremos personalizar forma uma seleção "Distinto" é usado. Em vez de ter a palavra-chave distinta aplica às linhas selecionadas, nós queremos que ela se aplica a apenas determinados campos, de modo que as primeiras linhas que correspondem aos campos vai se acostumar. Para um exemplo:

Bob Jones, 122 Main Street, Portland, OR
Sue Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR
Ralph Smith, 458 32nd Street, Portland, OR

queremos que este trabalho de forma que apenas as primeiras linhas para cada endereço é devolvido o seguinte:

Bob Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR

Com a nítida normal, todas as quatro linhas seria devolvido, o que é mais do que nós queremos. Alguém tem alguma idéia de como podemos fazer sobre isso? Obrigado.

Foi útil?

Solução

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

especifica PARTITION BY Address a lista de colunas que pretende agrupar por e ORDER BY ID indica a lista de colunas você define o "primeiro" ponto com.

(certifique-se a afirmação anterior é terminada por um ponto e vírgula.)

Outras dicas

Você tem que executar uma "SELECT DISTINCT" instrução SQL regular que apenas as consultas para os campos a verdade precisa ser distinto. Então uma vez que você começa aqueles para trás, executar outra consulta que leva o registro TOP 1 que tem a harmonização de dados para obter os campos não-distintas. No momento eu não vejo uma maneira de fazer isso em uma única instrução SQL ...

SELECT MIN (a.firstname + a.lastname), endereço de x Grupo por endereço.

Isso é uma resposta simplista, mas ele começa o seu accross ponto. ele irá retornar apenas o "menor" nome para cada endereço distinto.

Você precisa concatenação campo uso para fazer as distinções bem, mas ele vai te dar o que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top