MySQL ile Yevmiye Defteri

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

MySQL ile Yevmiye Defteri

Mesaj gönderen vkamadan »

Merhaba ,
iki tablom var birisi hesap planı (hesplan) , diğer muhasebe fişleri (mhsfisi)

yapıları şöyle ,

Kod: Tümünü seç

CREATE TABLE hesplan (
  id double NOT NULL auto_increment,
  hestip tinyint(1) unsigned default '0',
  heskod varchar(20) default NULL,
  hesad varchar(40) default NULL,
  pb varchar(5) default NULL,
  anaheskod varchar(20) default NULL,
  araheskod varchar(20) default NULL,
  vade varchar(7) default NULL,
  btip tinyint(1) unsigned default '0',
  PRIMARY KEY  (id),
  UNIQUE KEY XKod (heskod)
) TYPE=InnoDB;

CREATE TABLE mhsfisi (
  id double NOT NULL auto_increment,
  fistar date default NULL,
  fistip tinyint(1) unsigned default NULL,
  fiskod tinyint(2) unsigned default NULL,
  maddeno double default '0',
  fisno double default '0',
  heskod varchar(20) default NULL,
  aciklama varchar(50) default NULL,
  ba char(1) default NULL,
  tutar double(13,2) default NULL,
  pb varchar(5) default NULL,
  kur double(13,5) default NULL,
  dvztutar double(13,2) default NULL,
  yer tinyint(2) default NULL,
  yerid double default NULL,
  kayit tinyint(1) default '0',
  pozisyon_id double default NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY id (id),
  KEY id_2 (id)
) TYPE=InnoDB;
Şimdi benim yapmak istediğim, aşağıdaki gibi bir görüntü,

Kod: Tümünü seç

HK.             HA.                                B           A
----------- -------------------------------    ---------   --------
100          KASA                               550.00   
100 01 01    YTL KASA                           500.00
100 01 01    YTL KASA                            50.00
120          MÜŞTERİLER                                      550.00
120 01 01    VOLKAN                                          500.00
120 01 02    ALİ                                              50.00 

ama benim bütün uğraşlarım sonucunda ulaşabildiğim görüntü şu ,

Kod: Tümünü seç

HK.             HA.                                B           A
----------- -------------------------------    ---------   --------
100          KASA                               550.00   
100 01 01    YTL KASA                           550.00
120          MÜŞTERİLER                                      550.00
120 01 01    VOLKAN                                          500.00
120 01 02    ALİ                                              50.00 
joinli gruplama yaparak alabiliyorum ama , görüldüğü gibi bir yevmiye maddesinde ana hesabın toplamı gruplamayla alınıp altında her bir kalem detayı olmalı işin kısası eğer yevmiye maddesinde bulunan bütün kalemler farklı alt hesaplarsa soprun yok her biri tek tek görünüyor ama aynı heaptan birden fazla varsa grupladığı için kümülk olarak görünüyor.
kullandığın sorgu cümleciği şöyle,

Kod: Tümünü seç

select h.heskod,h.hesad,h.hestip,sum(IF(f.ba="B",f.tutar,0)) as borc , sum(IF(f.ba="A",f.tutar,0)) as alacak  from mhsfisi f , hesplan h where LEFT(f.heskod,LENGTH(h.heskod))=h.heskod and h.hestip<>1 and LENGTH(h.heskod)>=3  group by h.heskod order by h.heskod,h.hestip
Teşekkür ederim.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Yani aslında bir bakıma , kısmi gruplama yapmak istiyorum bana pek mantıklı gelmiyor ama şöyle birşey söyleyebilirmiyiz sorguda, eğer bu bir anahesapsa grup toplamı al, değilse olduğu gibi bırak tek getir.
Benim sorunum tahminimce ancak böyle bir kullanımla çözülebilir gibi geliyor.
:duvar:
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Volkan hocam yazdığın sorguya göre sonuç doğru. Oradaki "100 01 01 YTL KASA" bilgisini ayıran bir özellik var ise (mesela farklı tarihler olabilir) o alanı da guruplaman gerekir diye düşünüyorum :wink: 500 ve 50 rakamının ayrı ayrı olmasına nasıl karar verdin :?: Fark ne ise o group by a eklenmeli.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Recep abi,
Bu sorguyu yaparken başlı başına fiş tablosu kesinlikle işi görmüyor çünkü fiş kayıtları sadece alt hesaplara yapılabiliyor ama benim alt hesabın sahip olduğu ana hesabı da listelenen alt hesapların toplamını alacak şekilde gruba dahil etmem gerekiyor buda ancak Hesap planını tablosuyla ortak bir sorguyla mümkün tamam buraya kadar herşey normal, bende kalemleri ayıracak bir alanı gruplamaya dahil ettim mhsfisi.ID alanı, ama bu seferde korkunç bir sonuç ortaya çıktı ana hesap toplamı , altındaki alt hesap sayısı kadar listelendi ,

Kod: Tümünü seç

HK.             HA.                                B           A 
----------- -------------------------------    ---------   -------- 
100          KASA                               500.00    
100          KASA                                50.00    
100 01 01    YTL KASA                           500.00 
100 01 01    YTL KASA                            50.00 
120          MÜŞTERİLER                                      500.00 
120          MÜŞTERİLER                                       50.00 
120 01 01    VOLKAN                                          500.00 
120 01 02    ALİ                                              50.00
Aynen böyle oldu.
Volkan KAMADAN
www.polisoft.com.tr
onaydin
Üye
Mesajlar: 202
Kayıt: 07 Şub 2006 02:30

Mesaj gönderen onaydin »

eğer bu bir anahesapsa grup toplamı al, değilse olduğu gibi bırak tek getir.
Union ve order by kullanarak yapılabilir. Ana hesapları ayrı sorguda çek, diğerlerini ikinci bir sorguda (where kısmında ana hesapları ayırt edebilirsin). Sonrada order ile dönen sonuçları uygun bir şekilde sıralatırsan muradına erebilirsin. (belki ilave suni bir kolon tanımlaman gerekebilir ana hesap için 1 detaylar için 2 dersin ana hesap hep üstte çıkar ).
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@onaydin,
belirttiğin yöntemle tam olarak istediğim sonucu elde ettim, çok teşekkürler.

Aşağıdaki gibi düzenlediğim kod ;

Kod: Tümünü seç

select h.heskod,h.hesad,h.hestip,sum(IF(f.ba="B",f.tutar,0)) as borc , sum(IF(f.ba="A",f.tutar,0)) as alacak  from mhsfisi f , hesplan h where LEFT(f.heskod,LENGTH(h.heskod))=h.heskod and h.hestip=0 and LENGTH(h.heskod)>=3  group by h.heskod UNION select h.heskod,h.hesad,h.hestip,(IF(f.ba="B",f.tutar,0)) as borc , (IF(f.ba="A",f.tutar,0)) as alacak  from mhsfisi f , hesplan h where f.heskod=h.heskod and h.hestip=2 order by h.heskod
Yardımcı olan herkese teşekkür ederim.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla