我需要编写一个组合多列文本的查询。
我的数据库是我计算机上的壁纸数据库(我使用约翰的背景切换器),所以我可以轻松找到它们并对它们进行分类。
每条记录有 4 个字符字段(我认为这比标签样式更容易。)我需要一个查询来合并这些字段,以便所有 4 个不同字段的所有字符都在一列中,而不是合并到一个字段中。请记住,有些字符字段是空的。
此外,如果有更简单的方法可以做到这一点,请通知我。
这是我想要的样本:
(table)
col1|col2|col3
x |y |z
c | |
(query output)
outputcol
x
y
z
c
答案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
将存储重复项。
答案2
@A Dwarf,SELECT Column1 + Column2 + Column3
只要所有列都是文本并且非空,就可以工作。
||
是 Oracle 的连接运算符。对于 Access 来说,它是&
。
因此更好的说法是
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...
多次。
答案3
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 应用程序中常见的“&”连接符号替换了“+”。
干杯