3

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

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

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

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

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

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

(query output)    
outputcol    
x    
y
z  
c

3 ответа3

1

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

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

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

1

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

|| является оператором конкатенации для 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... столько раз, сколько вам нужно.

0
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.

ура

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .