2016-09-25 15 views
0

我有一个SQLite表得到一个tranposed表W/O创建新表

id  name  value 
1  n1  v1 
1  n2  v2 
2  n1  v3 
2  n2  v4 
3  n1  v5 
3  n2  v6 

,我想获得一个表像下面的

id  n1  n2 
1  v1  v2 
2  v3  v4 
3  v5  v6 

我们可以在旧表见id不是唯一的,而转置后的id在新表中是唯一的。 n的数目是未知的,但每个id应该具有相同数量的n。

有没有办法让我可以通过SQLite查询获得转置表,而不用创建新表?

+0

输出列的数量是否固定,即只有2个('n1'和'n2')? – redneb

+0

@redneb号他们不是固定的。他们可能是n1,n2,... n5。但是每个id应该有相同数量的n。 –

回答

1

不幸的是,没有办法在一个单一的查询sqlite中做到这一点。唯一觉得你可以做的是找回的东西所有可能的名称列表像

SELECT DISTINCT name FROM t ORDER BY name 

,然后动态地构造一个查询,将产生期望的结果,如下面的(假设只有名字:n1n2):

SELECT t0.id, t1.value AS n1, t2.value AS n2 
FROM (SELECT DISTINCT id FROM t ORDER BY id) t0 
    LEFT JOIN t t1 ON t0.id=t1.id AND t1.name='n1' 
    LEFT JOIN t t2 ON t0.id=t2.id AND t2.name='n2'; 

或者,你可以使用相关子查询,但它可能会慢一些:

SELECT 
    id, 
    (SELECT value FROM t WHERE id=t0.id AND name='n1') AS n1, 
    (SELECT value FROM t WHERE id=t0.id AND name='n2') AS n2 
FROM (SELECT DISTINCT id FROM t ORDER BY id) t0; 
+0

这些查询中的t1和t2是什么? –

+1

它们是子查询的别名,以便我可以引用它们的某些列。 – redneb