SQLite 在另一列的值上拆分列
SQLite split column on another column's value
我有一个数据库,其中多个变量显示为连续的行(如下所示,变量由它们的标签区分)。因此,它们的值在 'value' 列中显示为连续的行。
现有table:
为了进行数据分析,我需要将每个变量的值拆分到单独的列中,如下图所示。
下面列出了 SQLite 查询。我曾尝试使用 GROUP BY 标签并对值进行平均,但结果变得过于细化以至于无法使用。
非常感谢您的建议!
SELECT
tag
,time
,value
FROM
[archive]..[interp]
WHERE
tag
IN
( 'flow1.Val'
, 'flow2.Val'
, 'density1.Val'
, 'density2.Val'
)
AND
time
BETWEEN
't-1d' and 't'
AND
timestep = '1h'
您可以使用条件聚合:
select time,
max(case when tag = 'flow1.Val' then value end) as flow1_val,
max(case when tag = 'flow2.Val' then value end) as flow2_val,
max(case when tag = 'density1.Val' then value end) as density1_val,
max(case when tag = 'density2.Val' then value end) as density2_val
from [archive]..[interp]
group by time
根据您的实际要求,如果给定的 time/tag 元组有多个行,您可能希望使用 max()
之外的另一个聚合函数。
我有一个数据库,其中多个变量显示为连续的行(如下所示,变量由它们的标签区分)。因此,它们的值在 'value' 列中显示为连续的行。
现有table:
为了进行数据分析,我需要将每个变量的值拆分到单独的列中,如下图所示。
下面列出了 SQLite 查询。我曾尝试使用 GROUP BY 标签并对值进行平均,但结果变得过于细化以至于无法使用。
非常感谢您的建议!
SELECT
tag
,time
,value
FROM
[archive]..[interp]
WHERE
tag
IN
( 'flow1.Val'
, 'flow2.Val'
, 'density1.Val'
, 'density2.Val'
)
AND
time
BETWEEN
't-1d' and 't'
AND
timestep = '1h'
您可以使用条件聚合:
select time,
max(case when tag = 'flow1.Val' then value end) as flow1_val,
max(case when tag = 'flow2.Val' then value end) as flow2_val,
max(case when tag = 'density1.Val' then value end) as density1_val,
max(case when tag = 'density2.Val' then value end) as density2_val
from [archive]..[interp]
group by time
根据您的实际要求,如果给定的 time/tag 元组有多个行,您可能希望使用 max()
之外的另一个聚合函数。