anlamadığım, 138'i nasıl bulduğunuz?
4x12 + 7x15 = 153 değil mi?
eğer doğru ise bir şeyler önerebilirim, ama 138'in epey uğraştırdığını da söylemeliyim 
Kod:
declare @s smalldatetime, @f smalldatetime
set @s = '09.12.2009'
set @f = '09.22.2009'
select sum(fiyat*
case when dateadd(day, -1, @s)<tarihbaslangic and dateadd(day, 1, @f)>tarihbitis then datediff(day,tarihbaslangic, tarihbitis) else
case when dateadd(day, -1, @s)>tarihbaslangic and dateadd(day, 1, @f)>tarihbitis then datediff(day,dateadd(day, -1, @s), tarihbitis) else
case when dateadd(day, -1, @s)<tarihbaslangic and dateadd(day, 1, @f)<tarihbitis then datediff(day,tarihbaslangic, dateadd(day, 1, @f)) else 0 end end end)
from tablo_adi
where dateadd(day, -1, @s) < tarihbitis and dateadd(day, 1, @f) > tarihbaslangic
bu kodu query analizer'da test eder misiniz?
not: alanların smalldatetime olduğunu ve saat:dakika:saniye bilgisinin tutulmadığını varsaydım.