Объединить несколько столбцов в один с помощью запроса в базе данных доступа

77254
crazybmanp

Мне нужно написать запрос, который объединяет несколько столбцов текста.

моя база данных представляет собой базу данных обоев на моем компьютере (я использую фоновый переключатель Джона), поэтому я могу легко найти их и классифицировать их.

каждая запись имеет 4 символьных поля (я подумал, что это легче сделать, чем стиль тегов). Мне нужен запрос, чтобы объединить их, чтобы все символы из всех 4 различных полей были в одном столбце, а не объединены в одно поле. пожалуйста, помните, что некоторые поля символов пусты.

Кроме того, если есть более простой способ сделать это, пожалуйста, сообщите мне.

вот образец того, что я хочу:

(table) col1|col2|col3  x |y |z  c | |   (query output)  outputcol  x  y z  c 
3
Я знаю, что вы пометили его как «доступ», но было бы неплохо упомянуть, что это база данных, которую вы используете в тексте вопроса. wfaulk 14 лет назад 1

3 ответа на вопрос

1
pipTheGeek

@ Гном, SELECT Column1 + Column2 + Column3будет работать до тех пор, пока все столбцы текстовые и не нулевые.

||является оператором конкатенации для Oracle. Для доступа это так &.

Так что лучшее утверждение будет

SELECT Column1 & Column2 & Column3 as NewColumn FROM MyTable 

Очевидно, что если вы хотите разделить пространство, то это становится

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

&Оператор будет рассматривать нулевые значения как пустую строку.

Если вы не хотите, чтобы появлялись лишние пробелы, вы можете использовать что-то вроде

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

РЕДАКТИРОВАТЬ: Если вы также хотите включить оригинальные отдельные столбцы, а также присоединенную версию, просто перечислите их, например.

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

РЕДАКТИРОВАТЬ после прочтения примера вывода OP.

Похоже, что мы все делаем не совсем то, что хотел ОП. Таким образом, чтобы достичь того, о чем вы просите в приведенном вами примере, вам нужно.

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<>""  

Если вы хотите удалить дубликаты, то вам просто нужно удалить слово ALL, чтобы вы получили

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<>""  

Очевидно, вы можете повторить UNION SELECT...столько раз, сколько вам нужно.

+1. В самом деле. Возможно, потребуется включить предложение WHERE, чтобы исключить нулевые значения, если они ожидаются в столбцах. A Dwarf 14 лет назад 0
Я предполагал, что не все столбцы будут нулевыми для одной записи, поэтому вы, вероятно, не захотите исключать их из результатов. pipTheGeek 14 лет назад 0
И вы, вероятно, правильно предположили. Дело в том, что, если это не так, нужно использовать условие where, проверяющее на null. A Dwarf 14 лет назад 0
это работает в основном, оно включает в себя несколько пустых записей и несколько повторов, но я могу это исправить, спасибо. crazybmanp 14 лет назад 0
на самом деле, подождите, это просто объединяет строки, каждое отдельное поле нуждается в отдельной записи в запросе. crazybmanp 14 лет назад 0
I think you mean each field needs it own column in the query as well as the concatenated one. I have updated my answer to show how to do that. pipTheGeek 14 лет назад 0
After reading your edited post, I now understand what you want. I have added another edit to my answer. Sorry about the mis-understanding. pipTheGeek 14 лет назад 0
1
hyperslug

Может быть, это?

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

UNIONтолько объединяет различные значения (если у вас есть 4 значения 't', он только устанавливает одно). UNION ALLбудет хранить дубликаты.

0
A Dwarf
SELECT (Column1 + Column2 + Column3 + Column4) FROM YourTable 

Выше будут объединены все четыре столбца. Если вам нужен пробел:

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

Таким образом, знак плюс работает как конкатенатор. Наконец, если вам нужно назвать получившийся столбец:

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

Последнее замечание, прошло много лет с тех пор, как я в последний раз работал над Access, но я считаю, что вы также можете объединить поля с || оператор:

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

Следуя комментариям к этому ответу, разные механизмы баз данных могут предоставлять разные синтаксисы. Без сомнения, раздражение:

SELECT Column1 & Column2 & Column3 & Column4 FROM YourTable 

Здесь мы заменили «+» на обычный символ «&», присутствующий во многих приложениях Windows.

ура

по какой-то причине это приводит к таблице, заполненной пустыми значениями, равными количеству записей в первой таблице. crazybmanp 14 лет назад 0
э-э-э ... вы заменили столбец1, столбец2 и т. д. фактическими именами столбцов? Извините, я знаю, что это основной вопрос, но я не понимаю, почему вы получаете пустые значения A Dwarf 14 лет назад 0
да, я заменил все теги; все столбцы имя столбца и yourtable crazybmanp 14 лет назад 0
Хорошо. Редактирование моего ответа, чтобы включить другие возможности. Момент... A Dwarf 14 лет назад 0

Похожие вопросы