En iyi yanıtlayıcılar
Sql İç İçe Sorgu Yardımı

Soru
-
Merhabalar,
iki tablom var,
biri araçlar(aracId,aracmarkamodel,sistemKayitKmSi aracplaka, kmbilgisi, sil) diğeri hareket(hareketıd, aracıd, teslimkm, yapilankm),
senaryo;
araçlar tahsis edildikçe araç hareket tablosuna yazılıyor. Ben dbo.araclar.Sil=False olan tüm araçların en son yaptıkları teslim km bilgisini almak istiyorum
bir çok kayıt çıkıyor büyük kayıtı alamıyorum. eğer araç hiç alınmadıysa sistem kayitkm si gösterilecek.
iki tabloyu birleştirdiğimde en büyüğünü alıyorum bu sefer hiç yapmamış olan çıkmıyor
Yanıtlar
-
WITH hareketler AS ( SELECT MAX(hareketId) AS hareketId, aracid FROM hareket GROUP BY aracId ), sonKm AS ( SELECT h.aracId, h.yapilanKm FROM hareket h INNER JOIN hareketler h2 ON h.aracId = h2.aracId AND h.hareketId = h2.hareketId ) SELECT arc.*, COALESCE(sk.yapilanKm, arc.sistemKayitKmsi) AS yapilanKm FROM araclar arc LEFT JOIN sonKm sk ON arc.aracId = sk.aracId WHERE arc.Sil = 0;
Not: Alan adlarini yazarken pek dikkat etmedim.- Yanıt Olarak İşaretleyen Cihan YakarMVP, Moderator 23 Ekim 2015 Cuma 16:31
Tüm Yanıtlar
-
WITH hareketler AS ( SELECT MAX(hareketId) AS hareketId, aracid FROM hareket GROUP BY aracId ), sonKm AS ( SELECT h.aracId, h.yapilanKm FROM hareket h INNER JOIN hareketler h2 ON h.aracId = h2.aracId AND h.hareketId = h2.hareketId ) SELECT arc.*, COALESCE(sk.yapilanKm, arc.sistemKayitKmsi) AS yapilanKm FROM araclar arc LEFT JOIN sonKm sk ON arc.aracId = sk.aracId WHERE arc.Sil = 0;
Not: Alan adlarini yazarken pek dikkat etmedim.- Yanıt Olarak İşaretleyen Cihan YakarMVP, Moderator 23 Ekim 2015 Cuma 16:31
-
hocam alanları uyarladım son hali bu şekilde ;
WITH hareketler
AS (
SELECT MAX(HareketId) AS HareketId, AracId
FROM dbo.Hareket
GROUP BY AracId
),
sonKm
AS (
SELECT h.AracId, h.YapilanKm
FROM dbo.Hareket h
INNER JOIN hareketler h2 ON h.AracId = h2.AracId AND
h.HareketId = h2.HareketId
)
SELECT arc.*, COALESCE(sk.YapilanKm, arc.Km_Bilgisi) AS YapilanKm
FROM Araclar arc
LEFT JOIN sonKm sk ON arc.AracId = sk.AracId
WHERE arc.Sil = 0;ama şu şekilde bir hata dönüyor
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '100.000' to data type int. -
nvarchar value '100.000'
Bu da ne :) Sen nasil boyle bir hata yaptin da 100000 gibi bir sayiyi nvarchar alana koydun? Ona gore duzelt SQL'i de, asil duzeltmeyi tablolarinda yapman gerekiyor.
SQL'de gecici duzeltme icin soyle bir sey yazabilirsin (unutma GECICI):
cast( replace(arc.Km_bilgisi, '.', '') as int )
Not: nvarchar olan kolon Km_bilgisi ise.
-
hocam hakikaten dediğiniz gibiymiş plaka kolonunu oluştururken hızlıca geçince sanırım onuda aynı veri tipinde yapmışım :) 2 kayıt vardı hocamda null yapıp değiştirdim sorgu çalışıyor sorunsuz olarak çok teşekkürler hocam nette bu tip bir örnek yoktu buda ilki olmuş oldu umarım ihtiyacı olan herkes bu bilginizden faydalanmış olacaktır.
-
-
-
... hocam nette bu tip bir örnek yoktu buda ilki olmuş oldu...
Lütfen genelleme yapmayalım :)
CTE SQL şeklinde aratırsan sayfalarca örnek bulabilirsin. Ayrıca Çetin abi forumda bir çok defa benzer örnekler verdi.