【发布时间】:2012-05-30 06:48:36
【问题描述】:
这基本上是一个数据库连接问题,但它需要使用列名到列名的映射组件,这让我很困惑。
我有多个调查表;为简单起见,假设我有两个,一个来自 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 中表达我需要的连接操作?也就是用map表,有没有办法把下面的转换成标准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;
提前非常感谢!
【问题讨论】: