INNER JOIN ve UNION ile sutunları birleştirme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen kahraman1285 » 06 Oca 2019 03:07

Merhaba

Şu şekilde tablolarım var ve bu tablolarda sql sorgusu ile iş emri tablosunda sadece id leri kayıtlı olan ve diğer tablolardaki stok adı,iscilik adı,hizmet adı sütünlarını alt alta tek kolonda göstermeyi istiyorum. fakat doğru select sorgusunu yazamadım yardımlarınızı esirgemezseniz çok sevinirim.

İş emri tablosu diğer tablolardaki id leri tuttuğum tablo
ID INTEGER GENERATED BY DEFAULT AS IDENTITY,
ISEMRI_NU INTEGER NOT NULL,
MUSTERI_NU INTEGER NOT NULL,
STOK INTEGER,
ISCILIK INTEGER,
HIZMET INTEGER

Kod: Tümünü seç

cREATE TABLE STOK (
    ID           INTEGER GENERATED BY DEFAULT AS IDENTIT
    ADI          VARCHAR(30) NOT NULL COLLATE UNICODE_CI,
    ...

Kod: Tümünü seç

CREATE TABLE ISCILIK (
    ID         INTEGER GENERATED BY DEFAULT AS IDENTITY,
    ISIN_ADI   VARCHAR(100) NOT NULL COLLATE UNICODE_CI,
    ....

Kod: Tümünü seç

CREATE TABLE HIZMET (
    ID        INTEGER GENERATED BY DEFAULT AS IDENTITY,
    ISIN_ADI  VARCHAR(100) NOT NULL,
    ....

yusuf simsek
Üye
Mesajlar: 304
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen yusuf simsek » 17 Oca 2019 02:24

Selamun Aleyküm,

Kod: Tümünü seç

SELECT TIP, ADI FROM 
(
    SELECT 'STOK' AS TIP, ID, ADI FROM STOK

   UNION ALL

   SELECT 'İŞÇİLİK' AS TIP, ID, ISIN_ADI  AS ADI FROM ISCILIK 

   UNION ALL

   SELECT 'HİZMET' AS TIP, ID, ISIN_ADI  AS ADI FROM HIZMET 
) AS ORTAK
Bu şekilde kullanabilirsin
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com

kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen kahraman1285 » 17 Oca 2019 06:22

Yusuf bey cevabınız için teşekkür ederim.
İstediğim işlemi yapamayınca veritabanını değiştirmek zorunda kaldım. İç içe select sorgusunu yazamadım. Yine konuyla ilgili başka bir sorun yaşıyorum. O konuda fikrinizi alabilir miyim?

İki tablom var:
Paket tablosu şu şekilde:

Kod: Tümünü seç

CREATE TABLE PAKET (
    ID         INTEGER GENERATED BY DEFAULT AS IDENTITY,
    STOK_ID    INTEGER,
    PAKET_NU   INTEGER NOT NULL,
    PAKET_ADI  VARCHAR(75) NOT NULL COLLATE UNICODE_CI,
    ADET       INTEGER NOT NULL
Stok tablom ise:

Kod: Tümünü seç

CREATE TABLE STOK (
    ID           INTEGER GENERATED BY DEFAULT AS IDENTITY,
    TIP          INTEGER,
    BARKOD       VARCHAR(13) COLLATE UNICODE_CI,
    ADI          VARCHAR(100) NOT NULL COLLATE UNICODE_CI,
    MIKTAR       DECIMAL(15,2),
    MIN_STOK     INTEGER,
    BIRIM        VARCHAR(10) COLLATE UNICODE_CI,
    GRUP         VARCHAR(20) COLLATE UNICODE_CI,
    MARKA        VARCHAR(20) COLLATE UNICODE_CI,
    MODEL        VARCHAR(10) COLLATE UNICODE_CI,
    OZEL_KOD     VARCHAR(15) COLLATE UNICODE_CI,
    URETICI_KOD  VARCHAR(15) COLLATE UNICODE_CI,
    RAF          VARCHAR(10) COLLATE UNICODE_CI,
    ALIS_F       DECIMAL(15,2),
    KDV          DECIMAL(15,2),
    SATIS_F      DECIMAL(15,2),
    KUR          VARCHAR(3),
    CARI_KOD     INTEGER,
    ADAMSAAT     DECIMAL(15,2),
    ACIKLAMA     BLOB SUB_TYPE 1 SEGMENT SIZE 250,
    RESIM        VARCHAR(100) COLLATE UNICODE_CI
);
Paket tablosundan paketleri şu şekilde çekip gride attığımda en sağ sutuna o paket numarasına paket tablosundaki adet * satıs fiyatı ile bağlı stokların toplam fiyatını almak istiyorum ama yapamadım.

İyi Çalışmalar.

yusuf simsek
Üye
Mesajlar: 304
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen yusuf simsek » 18 Oca 2019 08:11

Hayırlı Cumalar

Kod: Tümünü seç

SELECT P.ID, P.STOK_ID, P.PAKET_NU, P.PAKET_ADI, P.ADET AS PAKET_ADET, 
      
       ( P.ADET * S.SATIS_F  ) AS PAKET_SATIS_FIYAT 
FROM PAKET P
LEFT JOIN STOK S ON S.ID = P.STOK_ID
Sanırım bu şekilde bir sorguya ihtiyacınız var?

doğru mu anladım?

İyi Çalışmalar dilerim
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com

kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen kahraman1285 » 19 Oca 2019 02:14

Yusuf bey cevabınız için teşekkür ederim. Yapmak istediğim paket_nu aynı olan satırların toplamını almak ve en sağ sütuna yazdırmak cxdrid de master detail tablo kullandığımda master tabloya sadece paket adı ve numarasını çekiyorum sağ sanal sütuna da o paketin elemanlarınlarını toplamını çekmek istiyorum.

Paket nu 1 olan 10 adet stok ürünün adet * satış fiyatlarını toplayıp (sum) göstermek istiyorum. Detay tabloda ise ürünlerin sizin verdiğiniz sorgu ile adet * satış fiyatlarını göstereceğim.

iyi çalışmalar.

yusuf simsek
Üye
Mesajlar: 304
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen yusuf simsek » 21 Oca 2019 08:24

O zaman GROUP BY ile PAKET_NU alanına göre gruplayacağız...

Kod: Tümünü seç

SELECT P.ID, P.STOK_ID, P.PAKET_NU, P.PAKET_ADI,  
        
       SUM( P.ADET * S.SATIS_F  ) AS PAKET_SATIS_FIYAT 

FROM PAKET P
LEFT JOIN STOK S ON S.ID = P.STOK_ID

GROUP BY P.ID, P.STOK_ID, P.PAKET_NU, P.PAKET_ADI
Select satırına bir alan eklemeniz gerekirse aynı alan adını GROUP BY satırına da eklemelisiniz... Yada çıkardığınız alanı GROUP BY satırından da çıkarmalısınız...

Hayırlı Haftalar, Hayırlı Çalışmalar Dilerim


GROUP BY hakkında : https://www.mustafasaridal.com/veritab ... kullanimi/
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com

kahraman1285
Üye
Mesajlar: 352
Kayıt: 10 Nis 2006 08:07

Re: INNER JOIN ve UNION ile sutunları birleştirme

Mesaj gönderen kahraman1285 » 21 Oca 2019 06:30

Kod şu şekilde tam ihtiyacımı karşıladı teşekkür ederim.

Kod: Tümünü seç

SELECT  P.PAKET_NU, P.PAKET_ADI,
        
       SUM( P.ADET * S.SATIS_F  ) AS PAKET_SATIS_FIYAT 

FROM PAKET P
LEFT JOIN STOK S ON S.ID = P.STOK_ID

GROUP BY  P.PAKET_NU, P.PAKET_ADI

Cevapla