Forum

Tablo Birleştirme
 
Bildirimler
Hepsini Temizle

Tablo Birleştirme

7 Yazılar
3 Üyeler
0 Reactions
148 Görüntüleme
Mehmet Ertaş
(@mehmetertai)
Gönderiler: 23
Eminent Member
Konu başlatıcı
 

Merhabalar,

İki adet mevcut tablom var

1.Tablom stoklarımın Satış fiyatlarını belirlediğim tablom;

SELECT SUBE_KODU,STOKKODU,FIYAT1,FIYAT2,BASTAR FROM TBLSTOKFIAT WHERE A_S = 'S' and BASTAR = CONVERT(DATE,'05.03.2025',104) 

2.Tablom Her Şubenin fiyat etiketi çıkarırken log tuttuğu tablo;

SELECT STOK_KODU,STOK_ADI,SUBE_KODU,TIP,ETK_BASIM_TARIHI FROM TBLETIKETLOG WHERE CONVERT(DATE,ETK_BASIM_TARIHI,104) = CONVERT(DATE,'05.03.2025',104)

TBLSTOKFIAT tablosunda SUBE KODU alanı var fakat her stok için -1 olarak değeri var

TBLETIKETLOG tablosunda hangi şube etiket basmış ise o şubenin kodu var

Şube Etiket basımı yaparken 1 gün önceden basım yapabiliyor

Yani TBLSTOKFIAT tablosunda 86908528 kodlu stok BASTAR = 05.03.2025 iken, 

Şube, bu stoğun etiketini 05.03.2025 veya 04.03.2025 tarihinde çıkarmış olabilir.

Yani ETK_BASIM_TARIHI = 05.03.2025 veya ETK_BASIM_TARIHI = 04.03.2025 olabiliyor.

İstediğim Ekteki resim gibi İki tabloyu birleştirip Hangi şubemin etiketi basıp basmadığını kontrol etmek

İyi çalışmalar Dilerim..

EtiketBasim2

 

Bu konu 3 hafta önce 2 defa Mehmet Ertaş tarafından düzenlendi
 
Gönderildi : 22/04/2025 15:53

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33584
Illustrious Member Yönetici
 

Merhaba, aşağıdaki kodu dener misiniz?

 

-- Tüm şubelerin listesi alınır (örneğin TBLSUBELER tablosundan ya da LOG tablosundan distinct SUBE_KODU ile)
WITH SUBELER AS (
SELECT DISTINCT SUBE_KODU FROM TBLETIKETLOG
),

-- Etiket basımı gereken stoklar ve tarihleri
STOK_FIYATLARI AS (
SELECT
f.STOKKODU,
s.SUBE_KODU,
f.FIYAT1,
f.FIYAT2,
f.BASTAR
FROM TBLSTOKFIAT f
CROSS JOIN SUBELER s
WHERE f.A_S = 'S' AND f.BASTAR = CONVERT(DATE, '05.03.2025', 104)
),

-- Gerçekleşen etiket basımları (1 gün önceden veya aynı gün)
ETIKET_BASIMLARI AS (
SELECT
STOK_KODU,
SUBE_KODU,
ETK_BASIM_TARIHI
FROM TBLETIKETLOG
WHERE CONVERT(DATE, ETK_BASIM_TARIHI, 104) BETWEEN DATEADD(DAY, -1, CONVERT(DATE, '05.03.2025', 104)) AND CONVERT(DATE, '05.03.2025', 104)
)

-- Sonuçları birleştirip etiketi basılmış mı kontrol edilir
SELECT
sf.SUBE_KODU,
sf.STOKKODU,
sf.FIYAT1,
sf.FIYAT2,
sf.BASTAR,
eb.ETK_BASIM_TARIHI,
CASE
WHEN eb.ETK_BASIM_TARIHI IS NOT NULL THEN 'Etiket Basılmış'
ELSE 'Etiket Basılmamış'
END AS DURUM
FROM STOK_FIYATLARI sf

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 22/04/2025 16:14

Mehmet Ertaş
(@mehmetertai)
Gönderiler: 23
Eminent Member
Konu başlatıcı
 

Hakan Bey hızlı cevap için çok teşekkür ederim

Fakat;

eb.ETK_BASIM_TARIHI 

eb'i nereye tanımlayacağımı bulamadım.

Bu ileti 3 hafta önce Mehmet Ertaş tarafından düzenlendi
 
Gönderildi : 22/04/2025 16:24

Mehmet Ertaş
(@mehmetertai)
Gönderiler: 23
Eminent Member
Konu başlatıcı
 

Merhabalar,

WITH SUBELER AS (
SELECT DISTINCT SUBE_KODU FROM TBLETIKETLOG
),

STOK_FIYATLARI AS (
SELECT
f.STOKKODU,
f.FIYAT1,
f.FIYAT2,
f.BASTAR
FROM TBLSTOKFIAT f
WHERE f.A_S = 'S' AND f.BASTAR = CONVERT(DATE, '05.03.2025', 104)
),

ETIKET_BASIMLARI AS (
SELECT
STOK_KODU,
SUBE_KODU,
ETK_BASIM_TARIHI,
STOK_ADI
FROM TBLETIKETLOG
WHERE CONVERT(DATE, ETK_BASIM_TARIHI, 104) BETWEEN DATEADD(DAY, -1, CONVERT(DATE, '05.03.2025', 104)) AND CONVERT(DATE, '05.03.2025', 104)
)

SELECT
eb.SUBE_KODU,
sf.STOKKODU,
eb.STOK_ADI,
sf.FIYAT1,
sf.FIYAT2,
sf.BASTAR,
eb.ETK_BASIM_TARIHI,
CASE WHEN CONVERT(DATE, eb.ETK_BASIM_TARIHI, 104)<sf.BASTAR THEN '1 Gün Önce Basılmış'
when CONVERT(DATE, eb.ETK_BASIM_TARIHI, 104)=sf.BASTAR THEN 'Etiket Basılmış'
ELSE 'Etiket Basılmamış'
END AS DURUM
FROM STOK_FIYATLARI sf
JOIN ETIKET_BASIMLARI eb on eb.STOK_KODU = sf.STOKKODU
order by eb.SUBE_KODU

 

bu şekilde etiket basanlar ve 1 gün önce basanlar çıkıyor,

Fakat etiket basmayanlar gelmiyor.

 
Gönderildi : 24/04/2025 11:01

(@serkanates)
Gönderiler: 1347
Üye
 

Ben daha basit (anladığım kadarıyla) önereceğim. 2 tabloyu birleştimek için JOIN kullanabilirsin. Ortaokul matematik kümeler konusu gibi düşünün. TBLSTOKFIAT tablonuzdaki tüm veriler gelecek ancak TBLETIKETLOG tablosunda sadece eşleştiği bilgiler gelecek.

SELECT stok.sube, stok.stokkod, stok.tarih, log.basimtarih
FROM TBLSTOKFIAT stok
LEFT JOIN TBLETIKETLOG log
ON stok.sube=log.sube
AND stok.stokkod=log.stokkod
AND blabla.....(bu kısımda iki tablonuz aranızdaki ilişkiye göre eşleşme yapmalısınız.
WHERE stok.sube='SubeKodu'
AND stok.stokkod='abcd'

Sorguyu kendi tablo yapınıza göre düzenleyin. LEFT JOIN kullandığımız için TBLSTOKFIAT tablosundaki tüm veriler gelecek, ancak log tablosunda eşleşme olmazsa log.basimtarih alanı NULL dönecek. CASE yapısı ile bu değerin gösterimini de özelleştirebilirsiniz.

Bu arada chatgpt bu tip basit sorgular konusunda eğitici bir destek sunar ancak takılırsanız yine de belirtin yardımcı olmaya çalışalım.

Bu ileti 2 hafta önce Serkan Ateş tarafından düzenlendi
 
Gönderildi : 25/04/2025 22:51

Mehmet Ertaş
(@mehmetertai)
Gönderiler: 23
Eminent Member
Konu başlatıcı
 

Serkan bey,

Durumu şöyle anlatayım

Şube kodu alanı olan fakat bütün değerleri -1 olan fiyat tablom var 

birde 40 adet şube olan bir log tablom var

Örneğin 

X kodlu ürün fiyat tablosunda 1 adet kayıt ve şube kodu alanı değeri  -1 iken

Log tablosunda 30 adet X kodlu ürün var ve her bir şubenin kodu da SUBE_KODU alanında mevcut

Çünkü şubelerim Fiyat tablosunda ürünü seçmiş etiketini basmış ve şube kodu ile beraber log tablosuna yazmış.

10 şubede de etiket basımı yapılmadığından log tablosunda o güne ait kayıtlarda yok

yani şubeleri JOIN ile ortak yapamam.

 
Gönderildi : 29/04/2025 17:14

(@serkanates)
Gönderiler: 1347
Üye
 

Cevaplarken anladığım kadarıyla demiştim. Eksik kalmış olabilir. Dürüst olmak gerekirse son yazdığınızı da anladığım kadarıyla yanıtlayacağım.

Aşağıdaki sorguyu kontrol edip sonucunu yazın lütfen. Sorgu TBLSTOKFIAT tablonuzdaki tüm kayıtları çağırır, TBLETIKETLOG tablosuna bağlanarak SUBE_KODU ve ETK_BASIM_TARIHI alanlarını sonuca ekler. Böylece stoklarınıza ait hangi şubede etiket çıktısı alınıp alınmadığını raporlayabilirsiniz. Etiket çıktısı alan şubelerde ETK_BASIM_TARIHI görüntülenir. Etiket çıktısı almamış şubelerin ETK_BASIM_TARIHI  NULL döner. CASE yapıları ile sorgu sonucunuzu detaylandırabilirsiniz.

 

SELECT

log.SUBE_KODU,

fyt.STOKKODU,

fyt.FIYAT1,

fyt.FIYAT2,

fyt.BASTAR,

log.ETK_BASIM_TARIHI

FROM TBLSTOKFIAT fyt

LEFT JOIN TBLETIKETLOG log

ON fty.STOKKODU=log.STOK_KODU

 

 
Gönderildi : 30/04/2025 08:35

Paylaş: