这基本上是一个数据库连接问题,但它需要使用列名到列名的映射组件,这让我很困惑。
我有多个调查表;为简单起见,假设我有两个,一个来自 2010 年(称为“d2010”),另一个来自 2011 年(称为“d2011”)。行对应于调查,列(我们可以假设命名为'c1'、'c2'、'c3'、...'cN')对应于对问题的回答。所以,“d2010”看起来像
id c1 c2 c3 .. cX
survey 1
survey 2
survey 3
...
survey N
而“d2011”看起来像
id c1 c2 c3 .. cY
survey 1
survey 2
survey 3
...
survey N
主要目标是展示从 2010 年到 2011 年针对特定问题的回答如何变化。具体来说,我的目标是创建 SQL 命令来创建新表(包含三列),以针对特定响应显示两年之间的调查有何不同:
id 2010-response 2011-response
survey 1
survey 2
survey 3
...
survey N
如果列名保持一致,那么我需要的只是简单的
select d2011.id, d2010.c1 as 'last year', d2011.c1 'this year' from d2010 join d2011 on d2010.id=d2011.id;
不幸的是,创建表的人并没有保持列名一致。例如,
c1 of 2010 corresponds to c2 of 2011
c2 of 2010 corresponds to c1 of 2011
c3 of 2010 corresponds to c3 of 2011
c4 of 2010 corresponds to c7 of 2011
...
所以我一直在尝试做的是输入类似的东西
select d2010.id, d2010.c1 as 'last year', d2011.f(c1) 'this year' from d2010 join d2011 on d2010.id=d2011.id;
其中“d2011.f(c1)”表示使用将 2010 年的列名映射到 2011 年的列名的函数。该映射不够简单,无法用数学公式表示,所以我假设我需要一个表喜欢
2010 2011
c1 c2
c2 c1
c3 c3
c4 c7
有没有办法在 SQL 中表达我需要的连接操作?也就是说,使用映射表,有没有办法将以下内容转换为标准 SQL(一般)和 SQLite(特别是)?
select d2011.id, f(d2010.c1) as 'last year', d2011.c1 'this year' from d2010 join d2011 on d2010.id=d2011.id;.id;
首先十分感谢!