Sorgulamada Gruplama İşlemi

SORU:

İyi akşamlar,

aşagıdaki sorgunun sonucunda depo bakiyelerinin toplamını almak istiyorum.
bu yüzden listeyi her stok kodu için tek satırda almak istiyorum acaba imkanı
varmı?
serdar güngör

#SORGU
Select * from dbo_stkkart
LEFT JOIN dbo_depokart as k ON STKKOD=DEPOSTKKOD
where STKCALFLAG=1

#STOK KART TABLOSU
CREATE TABLE IF NOT EXISTS `dbo_stkkart_copy` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘id’,
`STKCALFLAG` char(1) DEFAULT NULL COMMENT ‘Aktif / Pasif’,
`STKKOD` varchar(80) NOT NULL COMMENT ‘Stok Kodu’,
`STKACIKLAMA` varchar(80) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `STKKOD` (`STKKOD`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin5 ROW_FORMAT=COMPACT;

INSERT INTO `dbo_stkkart_copy` (`id`, `STKCALFLAG`, `STKKOD`, `STKACIKLAMA`) VALUES
(1, ‘1’, ‘1101’, NULL),
(2, ‘1’, ‘1102’, NULL),
(3, ‘1’, ‘1103’, NULL),
(4, ‘1’, ‘1104’, NULL),
(5, ‘1’, ‘1105’, NULL);

#DEPO KART TABLOSU
CREATE TABLE IF NOT EXISTS `dbo_depokart` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘id’,
`DEPOKOD` varchar(40) DEFAULT NULL COMMENT ‘Depo Kodu’,
`DEPOSTKKOD` varchar(40) DEFAULT NULL COMMENT ‘Stok Kodu’,
`DEPOGIRENTOP` decimal(17,5) DEFAULT NULL COMMENT ‘Giren’,
`DEPOCIKANTOP` decimal(17,5) DEFAULT NULL COMMENT ‘Cikan’,
`DEPOBAKIYE` decimal(17,5) DEFAULT NULL COMMENT ‘Bakiye’,
`ACIKLAMA` varchar(80) DEFAULT NULL COMMENT ‘Açıklama’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin5;

INSERT INTO `dbo_depokart` (`id`, `DEPOKOD`, `DEPOSTKKOD`, `DEPOGIRENTOP`, `DEPOCIKANTOP`, `DEPOBAKIYE`, `ACIKLAMA`) VALUES
(1, ‘DEPO-MERKEZ’, ‘1101’, 10.00000, 0.00000, 10.00000, NULL),
(2, ‘DEPO-SUBE’, ‘1101’, NULL, NULL, NULL, NULL),
(3, ‘DEPO-MERKEZ’, ‘1102’, 20.00000, 0.00000, 20.00000, NULL),
(4, ‘DEPO-SUBE’, ‘1102’, NULL, NULL, NULL, NULL),
(5, ‘DEPO-MERKEZ’, ‘1103’, 30.00000, 0.00000, 30.00000, NULL),
(6, ‘DEPO-SUBE’, ‘1103’, NULL, NULL, NULL, NULL),
(7, ‘DEPO-MERKEZ’, ‘1104’, 30.00000, 0.00000, 30.00000, NULL),
(8, ‘DEPO-SUBE’, ‘1104’, 40.00000, 40.00000, 0.00000, NULL),
(9, ‘DEPO-MERKEZ’, ‘1105’, NULL, NULL, NULL, NULL),
(10, ‘DEPO-SUBE’, ‘1105’, 50.00000, 0.00000, 50.00000, NULL);

CEVAP:

Merhabalar,

Burada ihtiyacımız olan GRUP BY ile SUM fonksiyonları. Kısaca bu fonksiyonlardan bahsedeyim GRUP BY ile onlarca elma,armut ve karpuzlardan oluşan manavda hepsini bir kalemde ele alabiliyoruz.
GROUP BY ile belirttiğimiz alanlara ait select işlemi arka planda ayrı olarak çalışıyormuş gibi düşünelim.

SUM ise toplama fonksiyonu belirttiğimiz alanları toplama işlemi yapmaktadır. GROUP BY ile ayırdığımız yukardaki tablodaki STKKOD alanını şimdi toplayacağız.

Olması gereken SQL sorgumuz aşağıdaki gibidir.

SELECT 
s.id,s.STKKOD,s.STKACIKLAMA, SUM( k.DEPOGIRENTOP) as GIRENTOP, SUM( k.DEPOCIKANTOP) as CIKANTOP, SUM( k.DEPOBAKIYE) as BAKIYE
FROM dbo_stkkart s
LEFT JOIN dbo_depokart AS k ON s.STKKOD=k.DEPOSTKKOD
WHERE s.STKCALFLAG=1
GROUP BY s.STKKOD

Paylaş: