如何使用sql垂直调整列单元格?

时间:2018-09-07 09:00:34

标签: sql python-3.x sqlite

我正在将sqlite与python结合使用。假设我有一个像这样的数据表:

Name   | Age
_______|____
Mike   | 12
Jack   | 45
Ben    | 37
Anne   | 19

问题:是否可以(使用sqlite)对列进行垂直排列?如果是这样,怎么办?我希望我的数据表看起来像这样(我不在乎“年龄”列中的单元被乱序的顺序):

Name   | Age
_______|____
Mike   | 45
Jack   | 12
Ben    | 19
Anne   | 37

2 个答案:

答案 0 :(得分:2)

由于您的SQLite版本不支持window functionCTE,因此您可以尝试创建一个临时表来存储数据以及ROWIDrandom()

基于randomRn创建一个random()列,然后通过JOINROWID号(随机rowID)randomRn创建表

模式(SQLite v3.16)

CREATE TABLE T(
  Name VARCHAR(50),
  Age INT
);


INSERT INTO T VALUES ('Mike', 12);
INSERT INTO T VALUES ('Jack', 45);
INSERT INTO T VALUES ('Ben', 37);
INSERT INTO T VALUES ('Anne', 19);

CREATE TABLE temp1 
AS 
SELECT AGE,Name,ROWID,random() rn
FROM T

查询#1

SELECT t1.Name name,t2.Age age
FROM temp1 t1 JOIN 
(
  SELECT *,(
    select count(*) 
    from temp1 tt
    where tt.rn >= t1.rn
  ) randomRn
  FROM temp1 t1
) t2 on t1.rowid = t2.randomRn;

| name | age |
| ---- | --- |
| Ben  | 12  |
| Anne | 45  |
| Mike | 37  |
| Jack | 19  |

View on DB Fiddle

注意

在使用完临时表后,请记住DROP

答案 1 :(得分:0)

您可以在下面的sql中使用,只需在下面的查询中的2个地方替换表名,然后查看结果即可。

 select name, max ( age) age 
 from ( select name,  age from ( select name, null age  from temp_person  order by random() ) 
       union all 
        select name, age from ( select  name, age from temp_person order by random() )  )
 group by name