Salut,

Je souhaite calculer des distance entre villes et insérer le résultat dans une table. Seulement, je n'arrive pas à trouver une solution pour calculer la distance Marseille - Paris sans par la suite calculer la distance Paris - Marseille.

Voici de quoi illustrer mes propos.

Création des tables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE [dbo].[VILLE_1](
	[LIB_VILLE] [nvarchar](255) NULL,
	[CODE_INSEE] [float] NOT NULL,
	[LATITUDE] [nvarchar](255) NULL,
	[LONGITUDE] [nvarchar](255) NULL
) ON [PRIMARY]
 
-----------------------------------------------------
 
CREATE TABLE [dbo].[DISTANCE_1](
	[ID_DISTANCE] [int] IDENTITY(1,1) NOT NULL,
	[POINT_A] [varchar](50) NULL,
	[POINT_B] [varchar](50) NULL,
	[VALEUR] [float] NULL,
 CONSTRAINT [PK_DISTANCE_1] PRIMARY KEY CLUSTERED 
(
	[ID_DISTANCE] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Peuplement de la table VILLE_1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('La Roquette-sur-Siagne', 6108, '43.6', '6.95')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('La Roquette-sur-Var', 6109, '43.833333', '7.2')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Roubion', 6110, '44.083333', '7.05')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Roure', 6111, '44.083333', '7.083333')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Le Rouret', 6112, '43.683333', '7.016667')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Sainte-Agnès', 6113, '43.8', '7.466667')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-André', 6114, '43.733333', '7.283333')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Antonin', 6115, '43.916667', '6.983333')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Blaise', 6117, '43.833333', '7.233333')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Cézaire-sur-Siagne', 6118, '43.65', '6.8')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Dalmas-le-Selvage', 6119, '44.283333', '6.866667')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Étienne-de-Tinée', 6120, '44.258333', '6.925')
INSERT INTO [dbo].[VILLE_1]([LIB_VILLE], [CODE_INSEE], [LATITUDE], [LONGITUDE]) VALUES ('Saint-Jean-Cap-Ferrat', 6121, '43.683333', '7.333333')
Requête d'insertion de la table DISTANCE_1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
insert into DISTANCE_1
select v1.LIB_VILLE as POINT_A,
	v2.LIB_VILLE as POINT_B,
	(6366
		*acos(
			cos(radians(cast(isnull(v1.LATITUDE, '0') as float)))
			*cos(radians(cast(isnull(v2.LATITUDE, '0') as float)))
			*cos(radians(cast(isnull(v2.LONGITUDE, '0') as float))
					-radians(cast(isnull(v1.LONGITUDE, '0') as float))
			)
			+sin(radians(cast(isnull(v1.LATITUDE, '0') as float)))
			*sin(radians(cast(isnull(v2.LATITUDE, '0') as float)))
		)
	) as VALEUR
from VILLE_1 v1
	inner join VILLE_1 v2 on v1.LIB_VILLE <> v2.LIB_VILLE
where isnull(v1.LATITUDE, '') <> ''
	and isnull(v1.LONGITUDE, '') <> ''
	and isnull(v2.LATITUDE, '') <> ''
	and isnull(v2.LONGITUDE, '') <> ''
	and abs(abs(cast(isnull(v1.LATITUDE, '0') as float)) - abs(cast(isnull(v2.LATITUDE, '0') as float))) < 1
	and abs(abs(cast(isnull(v1.LONGITUDE, '0') as float)) - abs(cast(isnull(v2.LONGITUDE, '0') as float))) < 1
order by v1.LIB_VILLE, v2.LIB_VILLE
Cette requête insère donc toutes les distances (Marseille - Paris et Paris - Marseille).

Voyez-vous comment faire le plus simplement possible?

Merci par avance.