如何将数据从一列分成两列
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假设是错误的,好像也没有留下主键,貌似根本没有给表建索引以上是关于如何将数据从一列分成两列的主要内容,如果未能解决你的问题,请参考以下文章