如何将数据从一列分成两列

Posted

技术标签:

【中文标题】如何将数据从一列分成两列【英文标题】:How to PIVOT data from one column into two 【发布时间】:2020-02-03 15:32:04 【问题描述】:

我在 SQL 中有一个包含这些结果的查询,并尝试将它们分别转换为两列:

ID          Lat/Long     Geocoding

 1           Lat          27.4996954
 2           Lat          39.4236405
 3           Lat          40.4483913
 4           Long         -76.9341023
 5           Long         -81.0817888
 6           Long         -95.5968665
 .           .            .
 .           .            .
350          Lat          33.9760517

我想要的结果:

  ID         Lat          Long

   1       40.4483913     -97.303731
   .          .             .
   .          .             .
   .          .             .
 350       33.9760517      -81.0817888 

【问题讨论】:

您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS @Mark 你如何匹配纬度和经度?是身份证吗? 您的结果是否可能缺少将纬度与经度配对的列?好像不是id? @Mark 为什么要撤销答案?它不适合你吗? 【参考方案1】:

查询

我不得不假设您将使用 ID 列配对经纬度。

一个带有 where 条件的简单连接可以解决这个问题。

SELECT dlat.id, dlat.geocoding AS lat,
       dlong.geocoding AS lon
FROM geodata dlat inner join geodata dlong
ON  dlat.id = dlong.id     
WHERE
  dlat.latlong='lat'
  AND dlong.latlong='long';    

小提琴:https://www.db-fiddle.com/f/vSzZ4YPJC3NTewoE4k7t8z/1

DDL

create table geodata(
id integer,
latlong varchar(5),
geocoding float);

insert into geodata values( 1   ,   'Lat',  27.4996954  );
insert into geodata values( 2   ,   'Lat',  39.4236405  );
insert into geodata values( 3   ,   'Lat',  40.4483913  );
insert into geodata values( 4   ,   'Lat',  -76.9341023 );
insert into geodata values( 5   ,   'Lat',  -81.0817888 );
insert into geodata values( 6   ,   'Lat',  -95.5968665 );

insert into geodata values( 1   ,   'Long', 47.4996954  );
insert into geodata values( 2   ,   'Long', 59.4236405  );
insert into geodata values( 3   ,   'Long', 60.4483913  );
insert into geodata values( 4   ,   'Long', -56.9341023 );
insert into geodata values( 5   ,   'Long', -61.0817888 );
insert into geodata values( 6   ,   'Long', -75.5968665 );

【讨论】:

看OPs示例数据,ID假设是错误的,好像也没有留下主键,貌似根本没有给表建索引

以上是关于如何将数据从一列分成两列的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中,如何将某列 分成 两列。

怎么用excel把一列变成两列

将数据从一列插入另一个表的两列的过程

如何将excel里一列字分成2列

excel 里如何把一列单元格拆分成两列

Oracle SQL 数据透视表从一列变为两列