如何在许多行中的相同ID的SQL Server中的表上进行迭代?

马上

我有一个叫的city表,一个叫的routes_它们之间的关系是多对多的,所以我map在它们之间使用了一个表
routes_表具有路线的名称
city表具有城市的坐标。
map表格包含每个路线的所有城市及其路线顺序:

CREATE TABLE city
(
   ID int IDENTITY(1,1) PRIMARY KEY not null  , 
    name varchar(50) UNIQUE,
    populationOfCity int  not null,
    center char (10) not null,
    gover_id  int null,
    cordinates geography null,
);

CREATE TABLE routes_
(
    ID int IDENTITY(1,1) PRIMARY KEY not null,
    name varchar (50) not null,
);

CREATE TABLE map
(
    ID int IDENTITY(1,1) PRIMARY KEY not null  , 
    orderOfcity int not null,
    city_id int not null,
    route_id int not null,
    FOREIGN KEY( city_id )REFERENCES city (id),
    FOREIGN KEY( route_id )REFERENCES routes_ (id)
);

我需要找到最长的路线。我写这个算法来找到它,但实际上我对于sql server的语法是全新的,所以我需要一些帮助来编写它

  1. 我使用地理类型使用来查找两个城市之间的距离stdDistance
  2. 我想group by按route_id到地图表,所以我将每条路线的城市分组
  3. 通过排序地图表orederOfcity以计算距离
  4. 对其进行分组和排序后,在地图表上进行迭代,并循环查找相同路线的每个路线的距离,
  5. 将每个根的距离保存在数组中,然后找到最大值。

我开始写这篇文章,但我不知道如何完成循环语法

 SELECT map.route_id FROM map group by map.route_id order by MIN(map.orderOfcity)  

  declare @i int 
  declare @numOfRows int 
  set @i=1
  set @numOfRows=(SELECT COUNT (*) from map )
  while @i<@numOfRows

这是表格的插入语句:插入城市:

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Damascus',3140000,geography::STGeomFromText('POINT(0.0275361 51.5064694)', 4326),'yes');


INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Alepo',3140000,geography::STGeomFromText('POINT(-66.1711278 -17.4125)', 4326),'Yes');

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Hama',725000, geography::STGeomFromText('POINT(036.6666667 35.0833333)', 4326),'yes');

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Homs',1033000, geography::STGeomFromText('POINT(036.7500000 34.6666667)', 4326),'yes');

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Latakia',554000, geography::STGeomFromText('POINT(035.7500000 35.5000000)', 4326),'yes');

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Tartus',393054, geography::STGeomFromText('POINT(035.9166667 34.9166667)', 4326),'yes');


INSERT INTO city (name,populationOfCity,cordinates,center,gover_id)
VALUES ('Al_Bab',20000, geography::STGeomFromText('POINT(037.4833333 36.3833333)', 4326),'No',2);

INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Afrin',24000, geography::STGeomFromText('POINT(036.8333333 36.5333333)', 4326),'No');


INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('As Safirah',14000, geography::STGeomFromText('POINT(037.3500000 36.0833333)', 4326),'No');


INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Manbij',26000, geography::STGeomFromText('POINT(037.9500000 36.5166667)', 4326),'No');


INSERT INTO city (name,populationOfCity,cordinates,center)
VALUES ('Azaz',34000, geography::STGeomFromText('POINT(037.0666667   36.6000000)', 4326),'No');

插入路线:

INSERT INTO routes_(name) VALUES ('Al_Bab___Afrin');
INSERT INTO routes_(name) VALUES ('As Safirah___Azaz');
INSERT INTO routes_(name) VALUES ('Damascus___Latakia');
INSERT INTO routes_(name) VALUES ('Tartous___Damascus');

插入地图:

INSERT INTO map(orderOfcity,city_id,route_id) VALUES (1,7,1);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (2,9,1);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (3,8,1);

----As Safirah___Azaz
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (1,9,2);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (2,8,2);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (3,10,2);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (4,11,2);



INSERT INTO map(orderOfcity,city_id,route_id) VALUES (1,6,4);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (2,4,4);
INSERT INTO map(orderOfcity,city_id,route_id) VALUES (3,6,4);

在我按route_id分组并按bu orderOfCity对其进行排序之后,迭代必须在地图的表格上,因此我知道每条路线的城市,然后我应该计算每组的距离,然后在地图上进行迭代表格,并根据具有相同route_id的城市之间的距离来计算城市之间的距离(如果路线中包含以下示例):1)Al_Bab ___ Afrin 2)由于Safirah___Azaz在地图中的城市为:al bab,作为Safirah,Afrin,地图中的这些城市的路线ID为= 1,我应该计算它们之间的距离,然后移至mab中的下一个route_id为2并对其城市进行相同的计算。

史蒂夫·福特

尝试使用JOIN来映射表中的连续行:

SELECT R.Name as RouteName,
        SUM(C.cordinates.STDistance(C2.cordinates)) As Distance
FROM routes_ R
INNER JOIN Map M
    ON M.route_id = R.Id
INNER JOIN City C
    ON M.city_id = C.ID
INNER JOIN Map M2
    ON M2.route_id = R.Id AND M2.orderOfcity = M.orderOfcity + 1
INNER JOIN City C2
    ON C2.Id = M2.city_id
GROUP BY R.Name

这给出了:

RouteName          Distance
---------          --------------------------
Al_Bab___Afrin     103547.016615796
As Safirah___Azaz  247811.559896733
Tartous___Damascus 162303.402745115

要检索最长的路线,请使用:

SELECT TOP 1 R.Name as RouteName,
        SUM(C.cordinates.STDistance(C2.cordinates)) As Distance
FROM routes_ R
INNER JOIN Map M
    ON M.route_id = R.Id
INNER JOIN City C
    ON M.city_id = C.ID
INNER JOIN Map M2
    ON M2.route_id = R.Id AND M2.orderOfcity = M.orderOfcity + 1
INNER JOIN City C2
    ON C2.Id = M2.city_id
GROUP BY R.Name
ORDER BY SUM(C.cordinates.STDistance(C2.cordinates)) DESC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL中连接许多具有相同ID的行?

来自分类Dev

在R中的POSIXlt上进行迭代

来自分类Dev

在R中的POSIXlt上进行迭代

来自分类Dev

在Java Gxt中的ListStore上进行迭代

来自分类Dev

如何使用SQL Server合并具有相同ID的许多行

来自分类Dev

如何在车把中的对象的属性上进行迭代

来自分类Dev

在Python中,如何在一个迭代器上进行迭代,然后在另一个迭代器上进行迭代?

来自分类Dev

在python中不断增长的集合上进行迭代

来自分类Dev

在zk mvc中,我想在列表上进行迭代

来自分类Dev

在JavaScript Asp.net中的JSON上进行迭代

来自分类Dev

在Java 8中使用流在列表上进行迭代

来自分类Dev

如何停止SQL Server查询返回此查询中相同项目ID的多行

来自分类Dev

如何在MySQL中在具有相同ID的一行中显示多行?

来自分类Dev

在SQL Server的多个表上进行外部联接

来自分类Dev

如何在unordered_set中的无序对上进行迭代?

来自分类Dev

如何在集合上进行迭代时删除集合中的相邻条目

来自分类Dev

如何在Pandas数据框中的列上进行迭代和执行操作

来自分类Dev

如何使数组以相同的形式在sql表中添加多行

来自分类Dev

在SQL Server中的XML节点上进行多目标搜索

来自分类Dev

如何在 SQL 中检查具有相同操作的多行的条件?(查看详细信息)

来自分类Dev

在一个表中的列上进行排名

来自分类Dev

在一个选择查询中计算多个聚合函数时,SQL Server如何在行上进行迭代

来自分类Dev

如何在SQL中执行多行计算

来自分类Dev

如何在SQL中过滤多行条件

来自分类Dev

如何在BigQuery中的两个表上进行条件联接?

来自分类Dev

如何在Pandas.DataFrame中的列上进行迭代并将函数的结果附加到同一行?

来自分类Dev

在级联数组上进行迭代会更改原始数组中的项目。为什么?

来自分类Dev

bash脚本,用于在目标文件路径中的特定目录上进行迭代并忽略某些目录

来自分类Dev

从数组对象中删除值会修改整个对象,即使在键上进行迭代也是如此

Related 相关文章

  1. 1

    如何在SQL中连接许多具有相同ID的行?

  2. 2

    在R中的POSIXlt上进行迭代

  3. 3

    在R中的POSIXlt上进行迭代

  4. 4

    在Java Gxt中的ListStore上进行迭代

  5. 5

    如何使用SQL Server合并具有相同ID的许多行

  6. 6

    如何在车把中的对象的属性上进行迭代

  7. 7

    在Python中,如何在一个迭代器上进行迭代,然后在另一个迭代器上进行迭代?

  8. 8

    在python中不断增长的集合上进行迭代

  9. 9

    在zk mvc中,我想在列表上进行迭代

  10. 10

    在JavaScript Asp.net中的JSON上进行迭代

  11. 11

    在Java 8中使用流在列表上进行迭代

  12. 12

    如何停止SQL Server查询返回此查询中相同项目ID的多行

  13. 13

    如何在MySQL中在具有相同ID的一行中显示多行?

  14. 14

    在SQL Server的多个表上进行外部联接

  15. 15

    如何在unordered_set中的无序对上进行迭代?

  16. 16

    如何在集合上进行迭代时删除集合中的相邻条目

  17. 17

    如何在Pandas数据框中的列上进行迭代和执行操作

  18. 18

    如何使数组以相同的形式在sql表中添加多行

  19. 19

    在SQL Server中的XML节点上进行多目标搜索

  20. 20

    如何在 SQL 中检查具有相同操作的多行的条件?(查看详细信息)

  21. 21

    在一个表中的列上进行排名

  22. 22

    在一个选择查询中计算多个聚合函数时,SQL Server如何在行上进行迭代

  23. 23

    如何在SQL中执行多行计算

  24. 24

    如何在SQL中过滤多行条件

  25. 25

    如何在BigQuery中的两个表上进行条件联接?

  26. 26

    如何在Pandas.DataFrame中的列上进行迭代并将函数的结果附加到同一行?

  27. 27

    在级联数组上进行迭代会更改原始数组中的项目。为什么?

  28. 28

    bash脚本,用于在目标文件路径中的特定目录上进行迭代并忽略某些目录

  29. 29

    从数组对象中删除值会修改整个对象,即使在键上进行迭代也是如此

热门标签

归档