Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLite中将行转换为列_Sqlite - Fatal编程技术网

在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'