在SQLite中将行转换为列
我有这样的数据:在SQLite中将行转换为列,sqlite,Sqlite,我有这样的数据: url fieldname value ---------- ---------- ---------- 1000052801 NAME Thomas 1000052801 DATE 2007 1000131579 NAME Morten 1000131579 DATE 2005 1000131929 NAME Tanja 1000131929 DATE
url fieldname value
---------- ---------- ----------
1000052801 NAME Thomas
1000052801 DATE 2007
1000131579 NAME Morten
1000131579 DATE 2005
1000131929 NAME Tanja
1000131929 DATE 2014
1000158449 NAME Knud
1000158449 DATE 2007
1000158450 NAME Thomas
1000158450 DATE 2003
url fieldname value
---------- ---------- ----------
Thomas AVGDATE 2005
Morten AVGDATE 2005
Tanja AVGDATE 2014
Knud AVGDATE 2007
我正在尝试将它转换为这个(使用SQLite)。在所需的结果中,在每个id中,每个开始都应该与按时间顺序最接近的结束在同一行上。如果一个id有一个开始但没有结束(如id=4),那么相应的结束将为空(如下所示)
我试过这个
select
id,
max( case when start_end = "start" then date end) as start,
max(case when start_end = "end" then date end ) as end
from df
group by id
但是结果是这样的,这是错误的,因为id=5只有一行,而它应该有两行:
id start end
1 2 1994-05-01 1996-11-04
2 4 1979-07-18 <NA>
3 5 2010-10-01 2012-10-06
更新:加入@MatBailie的有用评论。谢谢!这正是我需要做的,只是做了一些改动:
SELECT
s.value AS 'url',
"AVGDATE" AS 'fieldname',
sum(e.value)/count(*) AS 'value'
FROM
(SELECT url, value
FROM quicktag
WHERE fieldname='NAME'
) AS s
LEFT JOIN
(SELECT url, substr(value,1,4) AS value
FROM quicktag
WHERE fieldname='DATE'
) AS e
ON s.url = e.url
WHERE e.value != ""
GROUP BY s.value;
我有一张这样的桌子:
url fieldname value
---------- ---------- ----------
1000052801 NAME Thomas
1000052801 DATE 2007
1000131579 NAME Morten
1000131579 DATE 2005
1000131929 NAME Tanja
1000131929 DATE 2014
1000158449 NAME Knud
1000158449 DATE 2007
1000158450 NAME Thomas
1000158450 DATE 2003
url fieldname value
---------- ---------- ----------
Thomas AVGDATE 2005
Morten AVGDATE 2005
Tanja AVGDATE 2014
Knud AVGDATE 2007
我需要根据url将列中的名称和日期关联为键,并生成一个字段,该字段的平均日期由多个名称字段分组
所以我的结果是这样的:
url fieldname value
---------- ---------- ----------
1000052801 NAME Thomas
1000052801 DATE 2007
1000131579 NAME Morten
1000131579 DATE 2005
1000131929 NAME Tanja
1000131929 DATE 2014
1000158449 NAME Knud
1000158449 DATE 2007
1000158450 NAME Thomas
1000158450 DATE 2003
url fieldname value
---------- ---------- ----------
Thomas AVGDATE 2005
Morten AVGDATE 2005
Tanja AVGDATE 2014
Knud AVGDATE 2007
不幸的是,我还没有足够的帖子来统计我的选票。请发布一个测试数据库的转储。包含“创建表格…”行的文本。这样我们就可以玩了。从哪里开始<代码>按id分组| |开始强制将每个字段隐式转换为字符串,然后连接它们。它应该是
按id分组,开始
,只需按两个字段分组。联合
会导致重复数据消除,因此成本可能会很高UNION ALL
不进行重复数据消除,应在此类情况下使用。table1、table2,其中blahblah
是1992年以前的语法。它应该是blahblah上的table1内部连接table2
像“_tart”
应该是='start'
在OP中id=5有四条记录。两个起点和两个终点。第一个查询将返回3对,而不是2对<代码>'2005-02-01'->'2009-09-17'和'2005-02-01'->'2012-10-06'
和'2010-10-01'->'2012-10-06'