如何在 DB2 中将 ROW 转置为 Column
在 DB2 中,我们如何将一个简单的“select * from TABLE 仅获取前 1 行”查询输出行转置为列?
TABLE 名称可以是动态的,因此 select 中的 (*) 是必须的。TIA
用于您的输入和建议。
示例:
从:
F1 | F2 | F3 |
---|---|---|
ABC | DEF | GHI |
到:
F1 |
---|
ABC |
DEF |
GHI |
in DB2, how can we transpose a simple “select * from TABLE fetch first 1 rows only” query output row into column?
TABLE name could be dynamic so (*) in select is a must..
TIA for ur inputs and suggestion.
Example:
from:
F1 | F2 | F3 |
---|---|---|
ABC | DEF | GHI |
to:
F1 |
---|
ABC |
DEF |
GHI |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试像下面这样的通用表函数。
第一个参数是任何有效的 SELECT 语句文本。
第二个参数是此 SELECT 语句要转换的列名列表。
您必须:
构造 SELECT 语句以仅返回字符串列并指定简单的列列表:
或 将列列表中的每个非字符串列显式转换为 CHAR:
Try a generic table function like below.
The 1-st parameter is whatever valid SELECT statement text.
The 2-nd parameter is a list of column names of this SELECT statement to convert.
You must either:
construct the SELECT statement to return only string columns and specify a simple column list:
or explicitly cast every non-string column in the list of columns to CHAR:
简短的回答是你不能。
Db2 for IBM i 中没有任何内容可以使用
SELECT *
和动态表来执行此操作。长答案,您可以构建一个存储过程或用户定义的表函数,动态构建并执行一个老式的语句,如下所示:
或者,由于您使用的是 v7.4,您可以 >构建并执行一个动态语句,将字段
CONCAT
转换为字符串列表,然后使用SPLIT() 表函数来解构将列表分成行。最后,您可能能够构建并执行动态语句,该语句使用 JSON 函数构建 JSON 数组,然后可以将其解构为具有 JSON_TABLE() 函数。
但正如所强调的,在所有情况下,您都需要知道实际 SELECT 的列名和表名。因此需要动态构建语句。
Short answer is you can't.
There's nothing in Db2 for IBM i that will do this with
SELECT *
and a dynamic table.Long answer, you can build a stored procedure or user defined table function that dynamically builds and executes an old school statement that looks like so:
Alternately, since you're on v7.4, you could build and execute a dynamic statement that
CONCAT
the fields into string list and then use the SPLIT() table function to deconstruct the the list into rows.Lastly, you might be able to build and execute a dynamic statement that uses the JSON functions to build a JSON array which could then be deconstructed into rows with the JSON_TABLE() function.
But as emphasized, in all cases you'll need to know column and table names for the actual SELECT. Thus the need to dynamically build the statement.
您可以尝试使用横向
You can try with LATERAL