Mesclar várias colunas em uma por meio de uma consulta em um banco de dados de acesso

3

Eu preciso escrever uma consulta que combine várias colunas de texto.

meu banco de dados é um banco de dados de papéis de parede no meu computador (eu uso switcher de background do john), para que eu possa encontrá-los facilmente e categorizá-los.

cada registro tem 4 campos de caractere (eu percebi que era mais fácil fazer isso do que uma tag style.) Eu preciso de uma consulta para mesclar, então todos os 4 campos diferentes estão em uma coluna, e não mesclados em um campo. lembre-se de que alguns dos campos de caracteres estão vazios.

também, se houver uma maneira mais fácil de fazer isso, avise-me.

aqui está uma amostra do que eu quero:

(table)
col1|col2|col3    
x   |y   |z    
c   |    |    

(query output)    
outputcol    
x    
y
z  
c
    
por crazybmanp 03.10.2009 / 16:03

3 respostas

1

Talvez isso?

SELECT col1 FROM table
UNION
SELECT col2 FROM table
UNION
SELECT col3 FROM table
UNION
SELECT col4 FROM table

UNION apenas une valores distintos (se você tiver 4 't' valores, ele apenas coloca um). UNION ALL armazenará duplicados.

    
por 04.10.2009 / 06:16
1

@A Um anão, SELECT Column1 + Column2 + Column3 funcionará desde que todas as colunas sejam textuais e não nulas.

|| é o operador de concatenação para o Oracle. Para o Access, é & .

Assim, uma declaração melhor seria

SELECT Column1 & Column2 & Column3 as NewColumn FROM MyTable  

Obviamente, se você quer o separador de espaço, então ele se torna

SELECT Column1 & " " & Column2 & " " & Column3 as NewColumn FROM MyTable

O operador & tratará os valores nulos como uma string vazia.

Se você não quisesse que os espaços extras aparecessem, poderia usar algo como

SELECT Nz([Column1] + " ","") & Nz([Column2] + " ","") & [Column3]

EDITAR: Se você também quiser incluir as colunas separadas originais, bem como a versão associada, basta listá-las também, por exemplo.

SELECT Column1 & " " & Column2 & " " & Column3 as NewColumn, Column1, Column2, Column3 FROM MyTable

EDIT depois de ler a saída de exemplo do OP.

Parece que todos nós estamos fazendo exatamente o que o OP queria. Então, para conseguir o que você está pedindo no exemplo que você mostrou, você precisa.

SELECT Column1 FROM MyTable WHERE Column1 Is Not Null and Column1<>""  
UNION ALL  
SELECT Column2 FROM MyTable WHERE Column2 Is Not Null and Column2<>""  
UNION ALL  
SELECT Column3 FROM MyTable WHERE Column3 Is Not Null and Column3<>""  

Se você deseja remover duplicatas, basta remover a palavra ALL para obter

SELECT Column1 FROM MyTable WHERE Column1 Is Not Null and Column1<>""  
UNION  
SELECT Column2 FROM MyTable WHERE Column2 Is Not Null and Column2<>""  
UNION  
SELECT Column3 FROM MyTable WHERE Column3 Is Not Null and Column3<>""  

Obviamente, você pode repetir o UNION SELECT... quantas vezes precisar.

    
por 03.10.2009 / 16:55
0
SELECT (Column1 + Column2 + Column3 + Column4)
FROM YourTable

O acima irá concatenar todas as quatro colunas. Se você precisar de um separador de espaço:

SELECT (Column1 + " " + Column2 + " " + Column3 + " " + Column4)
FROM YourTable

Assim, o sinal de mais funciona como um concatenador. Finalmente, se você precisar nomear a coluna resultante:

SELECT (Column1 + Column2 + Column3 + Column4) AS ColumnName
FROM YourTable

Uma última nota, há anos desde a última vez que trabalhei no Access, mas acho que você também pode concatenar campos com o || operador:

SELECT (Column1||Column2||Column3||Column4)
FROM YourTable

Seguindo os comentários para essa resposta, diferentes mecanismos de banco de dados podem fornecer sintaxes diferentes. Um aborrecimento, sem dúvida:

SELECT Column1 & Column2 & Column3 & Column4
FROM YourTable

Aqui substituímos '+' pelo habitual '&' símbolo de concatenação presente em muitos aplicativos do Windows.

Felicidades

    
por 03.10.2009 / 16:23