C'est un peu difficile à expliquer mais je ferai de mon mieux. J'ai une database qui maintient des informations sur Marine Shipping etc. J'ai les colonnes suivantes pour travailler avec. (Il y en a d'autres mais ils n'ont aucun but pour mon étude) J'ai Identificateur de message, Latitude, Longitude, MMSI (Ceci représente les signaux de vaisseau individuels, donc ils sont uniques aux vaisseaux) Ship_type, Vessel_name.
Alors, voici le problème
Essentiellement, ce que je dois faire est d'append le Ship_type et Vessel_name aux lignes avec Message_ID 1 et 3 en joignant le numéro MMSI qui est partagé par un Message_ID 5.
les questions que j'ai jusqu'à présent ..
WHERE (latitude > 55 and latitude < 85 and longitude > 50 and longitude < 141) And (Message_ID = 1 or Message_ID = 3);
Autre requête
WHERE Message_ID = 5;
Comment joindre tous les types Ship_type et Vessel_name qui aboutissent à la deuxième requête à la première requête?
Je me sens comme il devrait être mentionné que tout est à l'intérieur d'une seule table autorisée dbo.DecodedCSVMEssages_Staging qui a environ 100 millions d'inputs ..: S
Je le ferais probablement comme ceci:
SELECT t13.Message_ID, t13.Latitude, t13.Longitude, t13.MMSI, t5.Ship_type, t5.Vessel_name FROM yourTable As t13 OUTER APPLY ( SELECT TOP 1 * FROM yourTable As t5 WHERE t5.Message_ID = 5 AND t5.MMSI = t13.MMSI ) As t5 WHERE t13.Message_ID IN(1,3) AND t13.latitude > 55 and t13.latitude < 85 and t13.longitude > 50 and t13.longitude < 141
Je pense que vous voulez quelque chose comme ça:
select Message_ID, Latitude, Longitude, MMSI, x.Ship_type, x.Vessel_name from table t outer apply (select Ship_type, Vessel_name from table x where x.MMSI=t.MMSI and x.Message_ID=5) x where t.Message_ID in (1,3) and (latitude > 55 and latitude < 85 and longitude > 50 and longitude < 141);
with ship_cte(Ship_type,Vessel_name,MMSI) as(select Distinct Ship_type,Vessel_name,MMSI from TableName WHERE Message_ID = 5) select b.Ship_type,b.Vessel_name,a.other_columns from tableName a join ship_cte b on a.MMSI=b.MMSI WHERE (a.latitude > 55 and a.latitude < 85 and a.longitude > 50 and a.longitude < 141) And (a.Message_ID = 1 or a.Message_ID = 3);
Ici, dans la première partie de la requête, j'obtiens ship_type et vessel_name pour toutes les lignes où message_id = 5, et ensuite je rejoins cette partie de la requête avec la table principale sur la base du numéro MMSI.