SQL İle Tüm Kayıtları Tek Satırda Birleştirme Yöntemi

Bu makalemizde benim ilk defa ihtiyaç duyduğum bir şeyi sizlerle paylaşmak istiyorum programlama tarafında çok basit bir şekilde join metod’ları ile 1’den fazla kaydın aralarında ayraç konularak birleştirilmesi sağlanabiliyorken sql’de ne yazıkki direk olarak bu işi gören fonksiyon yok.

SQL İle Tüm Kayıtları Tek Satırda Birleştirme Yöntemi

Sql’de birleştirme işlemi için sizlerle paylaşmış olduğum alttaki kodu deneyerek direk olarak birden fazla kaydın aralarında virgül ayracı konularak tek satırda birleştirildiğini görebilirsiniz.

Örnek

SQL

Sonuç

PersonId Units
1 a,aa,Che,d,dd,f,ff,g,gg,h,hh,m,Mat,o,p,Phy,s,ss
2 Che2,Mat2,Phy2
3 Phy3
SQL İle Tüm Kayıtları Tek Satırda Birleştirme Yöntemi
5 (100%) 3 oy

12 yorum

  1. Merhaba hocam,

    Benim ihtiyacım olan sorgu ProductIDAndCategoriID tablosunda tuttuğum bir ürünün birden fazla kategoriye girmesi çekeceğim sorguda da aynı ürüne ait kategorileri tek satırda göstermek. Aşağıdaki

    çektiğim sorgu aşağıdaki gibi dönmeli bunu nasıl yaparım yardımlarınzı rica ediyorum. Teşekkürler.

    ProductID CategoriID

    1 2,3,5,6,7
    2 5,9,10,12,18

    1. Merhaba,

      Özür dilerim ama tam olarak yapmak istediğinizi anlamadım ilgili tablo yapısını bana mail yolu ile iletirseniz bu şekilde daha sağlıklı yardımcı olabilirim ve yapmak istediğiniz daha net biçimde belirtebilirseniz memnun olurum.

  2. Merhaba. Bu konuya benzer bir sorum olacak.

    ID Tarih Tip
    1 01.01.2017 1
    1 02.03.2017 2
    2 03.04.2017 1
    2 04.04.2017 2

    Yukarıdaki tabloyu ID ye göre gruplama yaparak göstermek istiyorum. Ancak 2 adet tarih olacak. Tip 1 olanlar Tarih 1 , Tip 2 olanlar Tarih 2 kolonuna yazılacak. Bunu nasıl yapabilirim acaba?

    Örn:
    ID Tarih1 Tarih2
    1 01.01.2017 02.03.2017
    2 03.04.2017 04.04.2017

    1. Merhaba,

      Eğer gruplanacak id değeri dinamik olarak sayısı 2’den fazla olmayacak ve en fazla 2 olacak ise alttaki subquery’li çözüm ihtiyacınızı giderebilir.

      Sonuca şu linkten bakabilirsiniz: http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=97c49f005f58431a07c266c7343c77eb

      1. Merhaba,

        İlginiz için teşekkür ederim. Bu çözüm işimi görüyor ancak müsadeniz olursa size bir fikir danışmak istiyorum.

        Bir CRM geliştirdim. Arka planda bir sürü modül ve kullanıcı bir yetkilendirme kontrolü ile çalışıyor. Ben bu sistem için güzel bir Log modülü geliştirmek istiyorum. Yapılan sorguları, güncelleme, ekleme, silme, Mail gönderme, Yazıcıdan çıktı alma vs vs herşeyi kayıt altına alan bir yapı oluşturmak istiyorum. Yukarıdaki takıldığım kısım aslında bu yapı içerisindeki Oturum açma ve Kapatma kayıtlarını nasıl kayıt altına alırım diye düşünürken çıktı.

        Normalde sadece tek tarih (LogTarihi) olarak işlemleri kayıt altına alacaktım. Sonrasında Oturum açıldığında açılan oturumun ne zaman kapandığı bilgisinin lazım olabileceğini düşündüm ve LogStartDate ve LogEndDate diye 2 tarih mi yapayım yoksa aynı session için Oturum açıldı ve Kapandı diye 2 kayıt mı açayım fikri arasında kaldım. Çift tarih kullanırsam birçok kayıt için tarih alanlarından birisi boş kalacak. Ancak tek tarih kullanırsam da her session için çift kayıt oluşmuş olacak ve bu 2 kaydı birleştirmek için kullanılan sorgu daha fazla yoracak sistemi.

        Uzun bir yazı olduysa kusura bakmayın ama sizce bir Log tablosu nasıl olmalı, Ne tür kayıtlar ve ne tür alanlar ile tutulmalı. Ve yukarıdaki gibi bir düşünce içerisinde olsaydınız hangisini yapardınız?

        İlginiz için şimdiden teşekkür ederim…

        1. Rica ederim inşallah ihtiyacınızı karşılar.

          Log tablosu konusunda daha önce onlarca projedeki tecrübelerime dayanarak belki yol gösterebilirim ama doğruluğu elbetteki tartışılabilir projelerimde klasik olarak log tablom şu şekilde oluyor.

          ID – Otomatik Artan Sayı vey Guid,
          FormName yada PageName – İşlemin eğer web projesi ise hangi sayfadan windows projesi ise hangi form’dan yapıldığını belirtebileceğimiz alandır,
          EventName – Benzersiz bir olay adı girmelisiniz,
          Data – Hangi veriler üzerinden işlem yapıyorsanız bu verileri isterseniz metinsel olarak birleştirip kaydedebilirsiniz isterseniz blob bir nesne olarak kaydedebilirsiniz,
          DurationMilliSeconds – Yapılan işlemin süresini tutabilirsiniz,
          Description – Log’un ne olduğunu anlatan kısa ve öz açıklama.
          CreatedDate – Logun oluşturulma tarihi ve saati,
          CreatedUser – Oluşturan kullanıcı diye adlandırılabilir ama alana verilecek değer sistem eğer kullanıcı bazlı çalışıyor ise kullanan kişinin id’si verilebilir.
          IP – Projenin kullanıldığı ip adresi kaydedilmelidir.

          Benim önerebileceğim örnek log tablosu bu şekilde olabilir belirtmiş olduğunuz gibi kullanıcının sırf giriş çıkışı için 2 tarih alanı ile hiç kullanılmayacak kullanıcı girişi haricindeki diğer olaylarda belkide hiç kullanılmayacaktır o yüzden kullanıcının çıkışınıda farklı bir olay olarak kaydetmelisiniz ki şöyle bir durumda söz konusu olacaktır kullanıcı giriş yaptı ama çıkış yapmadan tarayıcıyı kapattı fakat henüz oturumu sona ermediği için kullanıcının çıkışını kayıt altına alamacayaksınız çünkü kullanıcı çıkış işlemi gerçekleştirmedi size tarayıcı kapattığında bu durumu kullanıcı çıkış yaptı olarak algılarsanız bir mantıksızlık ortaya çıkacağından ayrı bir kayıt olarak eklemeniz daha doğru olacaktır fakat belirtmiş olduğum gibi kullanıcının giriş yapıp çıkış yapmadığı çünkü kendi isteği ile oturum kapatma işlemi gerçekleştirmeyip oturum süresi dolduğu için sistem tarafından otomatik kapatılma işlemi gereçekleştiğinden çıkış logu alamayacaksınızdır ama illaki çıkışıda yakalamak istiyorum derseniz şöyle yapmanız mümkün session timeout event’inde session’da ilgili kullanıcıya ulaşıp çıkış log’unu bu şekilde yapıp sorunu giderebilirsiniz.

        1. Pardon. Denetim için bekleniyormuş o sebeple görünmüyordu. Şimdi hepsi birden göründü. Kusura bakmayın 🙂

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir