Forum

Sql Fiyat Listesi
 
Bildirimler
Hepsini Temizle

[Çözüldü] Sql Fiyat Listesi

Mehmet Ertaş
(@mehmetertai)
Üye

Merhabalar,
Mevcut ERP Programımdan Stok fiyat listem var, aşağıdaki gibi veri çekiyorum.

SET DATEFORMAT DMY;
DECLARE @BASTAR DATETIME set @BASTAR='01.01.2020';
DECLARE @BITTAR DATETIME set @BITTAR='31.12.2021';
SELECT STOKKODU,(SELECT STOK_ADI FROM TBLSTSABIT WHERE STOK_KODU = STOKKODU)STOK_ADI
,BASTAR[Fiyat Tarihi]
,CASE WHEN A_S = 'A' THEN 'Alış' WHEN A_S = 'S' THEN 'Satış' END AS [Alış/Satış]
,isnull(CASE WHEN A_S = 'A' THEN FIYAT1 END,0) AS [Alışfiyat]
,FIYAT1
FROM TBLSTOKFIAT WHERE
STOKKODU ='5449000016645'
AND BASTAR BETWEEN @BASTAR AND @BITTAR
-------------------------------
Stok Kodu              Fiyat Tarihi   Al/Sat   Alış Fiyat   Satış Fiyat
5449000016645     2020-01-01   Satis     0.00           5.90
5449000016645     2020-01-27   Alis       6.74           6.74
5449000016645     2020-03-06   Satis     0.00           6.75
5449000016645     2020-04-07   Satis     0.00           6.75
5449000016645     2020-08-08   Satis     0.00           5.90
5449000016645     2020-09-10   Alis       8.00           8.00
5449000016645     2020-10-11   Satis     0.00           9.25
5449000016645     2020-11-12   Satis     0.00           9.25
----------------------------------------------

Bu sorguya göre hangi tarihlerde kar, hangi tarihlerde zarar etmişim? hemen yanına oranları ile yazabilirmiyim.
Şimdiden Teşekkürler.
(Yani Satış fiyatı verilen tarihten önceki en büyük tarihteki alış fiyatını [Alış Fiyat] alanına yazmak yeterli olur sanırım.)
Aşağıdaki gibi;
Stok Kodu               Fiyat Tarihi     Al/Sat     Alış Fiyat   Satış Fiyat
5449000016645      2020-01-01     Satis        0.00         5.90
5449000016645      2020-01-27     Alis          6.74         6.75
5449000016645      2020-03-06     Satis        6,74         6.75
5449000016645      2020-04-07     Satis        6,74         6.75
5449000016645      2020-08-08     Satis        6,74         5.90
5449000016645      2020-09-10     Alis          8.00         5,90
5449000016645      2020-09-10     Satis        8.00         9.25
5449000016645      2020-11-12     Satis        8.00         9.25

Alıntı
Konu başlatıcı Gönderildi : 25/01/2021 08:37
Ömer ÇOLAKOĞLU
(@omercolakoglu)
Üye

Merhaba,

İstediğin yapıya uygun elimde data olmadığı için şöyle bir örnek yaptım

---TABLO OLUŞTURMA
--CREATE table TBLSTOKFIAT (ID INT IDENTITY (1,1),STOKKODU VARCHAR(100),MIKTAR INT,BASTAR datetime,ALSAT varchar(10),FIYAT INT)

--TABLONUN İÇİNE 1000 SATIR RASTGELE VERİ GİRME
TRUNCATE TABLE TBLSTOKFIAT
DECLARE @STOKKODU AS VARCHAR(100)='5449000016645'
DECLARE @ALISFIYAT AS INT=100
DECLARE @SATISFIYAT AS INT=120
DECLARE @FIYAT AS INT

DECLARE @I AS INT=1
WHILE @I<100
BEGIN
DECLARE @RAND AS FLOAT
SET @RAND =RAND()
DECLARE @MIKTAR AS INT
DECLARE @ALSAT AS VARCHAR
DECLARE @TARIH AS DATE
IF @RAND>=0.5
BEGIN
SET @ALSAT ='S'
SET @FIYAT =RAND()*20+(@SATISFIYAT-10)
SET @TARIH =DATEADD(DAY,RAND()*365,'20200101')
INSERT INTO TBLSTOKFIAT (STOKKODU,BASTAR,ALSAT,FIYAT,MIKTAR)
VALUES (@STOKKODU,@TARIH,@ALSAT,@FIYAT,RAND()*10)
END
ELSE
BEGIN
SET @ALSAT ='A'
SET @FIYAT =RAND()*20+(@ALISFIYAT-10)
SET @TARIH =DATEADD(DAY,RAND()*365,'20200101')
INSERT INTO TBLSTOKFIAT (STOKKODU,BASTAR,ALSAT,FIYAT,MIKTAR)
VALUES (@STOKKODU,@TARIH,@ALSAT,@FIYAT,RAND()*10)
END
SET @[email protected]+1
END

--MALİYET, SATIŞ FİYATI, SON ALIŞ FİYATI VE KAR HESAPLAMA
SELECT *,FIYAT-SONALISFIYATI AS KAR,ROUND((FIYAT-SONALISFIYATI)/CONVERT(FLOAT,SONALISFIYATI)*100,2) AS KAR_YUZDE FROM
(
SELECT STOKKODU,BASTAR,ALSAT,FIYAT,
(SELECT TOP 1 FIYAT FROM TBLSTOKFIAT WHERE STOKKODU=SF.STOKKODU AND BASTAR<=SF.BASTAR AND ALSAT='A' ORDER BY BASTAR DESC) AS SONALISFIYATI

FROM TBLSTOKFIAT SF WHERE ALSAT='S'
) T
ORDER BY BASTAR

 

Bu da sonuç.

image
CevapAlıntı
Gönderildi : 30/01/2021 01:00
Mehmet Ertaş
(@mehmetertai)
Üye

@omercolakoglu 

Emeğinize sağlık Çok teşekkür ederim

Tam olarak isteğim yapıda olmuş.

 

CevapAlıntı
Konu başlatıcı Gönderildi : 01/02/2021 13:37
Ömer ÇOLAKOĞLU
(@omercolakoglu)
Üye

@mehmetertai Rica ederim.

CevapAlıntı
Gönderildi : 01/02/2021 14:15
Paylaş: