Umarım işinizi görür.
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_zekeriye`$$
CREATE DEFINER=`nsm`@`%` PROCEDURE `sp_zekeriye`()
BEGIN
DECLARE loop_end INT DEFAULT 0;
DECLARE loop_endChild INT DEFAULT 0;
DECLARE _tanim VARCHAR(20);
DECLARE _tanimlar VARCHAR(2000);
DECLARE _tutarlar VARCHAR(2000);
DECLARE _kayitno, _itemno, tmp_kayitno INTEGER;
DECLARE _deger FLOAT;
DECLARE curParent CURSOR FOR SELECT kayitno,itemno,deger FROM detail
ORDER BY kayitno;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET loop_end = 1;
DROP TABLE IF EXISTS resultset;
CREATE TABLE resultset (kayitno integer, tanimlar VARCHAR(2000),
tutarlar VARCHAR(2000)) ENGINE = MEMORY;
SET tmp_kayitno = -1;
OPEN curParent;
SET _tanimlar = '';
SET _tutarlar = '';
REPEAT
FETCH curParent INTO _kayitno, _itemno, _deger;
IF NOT loop_end THEN
/* Kayit numaralari es ve ilk kayit degilse; Onceki tanimlari
gir, yeni tanimlar icin hazirlan. */
IF ( (_kayitno <> tmp_kayitno) AND ( tmp_kayitno <> -1 ) ) THEN
INSERT INTO resultset VALUES(tmp_kayitno,
_tanimlar,_tutarlar);
SET _tanimlar = '';
SET _tutarlar = '';
END IF;
SELECT tanim INTO _tanim FROM master m WHERE itemno=_itemno;
SET _tanimlar = CONCAT(_tanimlar, _tanim, '*');
SET _tutarlar = CONCAT(_tutarlar, CAST(_deger AS CHAR), '*');
SET tmp_kayitno = _kayitno;
END IF;
/* Son kaydi es geçmeyelim. */
IF loop_end THEN
INSERT INTO resultset VALUES(tmp_kayitno, _tanimlar,_tutarlar);
END IF;
UNTIL loop_end END REPEAT;
CLOSE curParent;
SELECT * FROM resultset;
DROP TABLE resultset;
END$$
DELIMITER ;
*Çıktısı şu şekilde*:
1 - TANIM1*TANIM2* - 100*200 *
2 - TANIM1* - 150*
3 - TANIM3* - 50*
Acil diyince hemen yolladım sondaki fazla * işaretlerini siz sildirizsiniz.
2008/8/20 Zekeriye Bozkurt <zekeriye_at_hotmail.com>
> Selamlar;
>
> Yapıları aşağıdaki şekilde olan 2 tablom var.
>
> Master -> Itemno integer, TANIM varchar(200);
> ----------------------------------------------------------
> 1 - tanım1
> 2 - tanım2
> 3 - tanım3
>
> Detail -> KAYITno integer, ITEMNO integer, Deger FLOAT;
> ---------------------------------------------------------------------
> 1 - 1 - 100
> 1 - 2 - 200
> 2 - 1 - 150
> 3 - 3 - 50
> ..
>
> Bir kayıtno ya ait en fazla 10 adet detay kayıt olabiliyor. Bir kayıtno ya
> ait tanımları yan yana , tutarları yan yana 2 sutün halinde aralarına
> char(XY) koyarak nasil birleşik olarak listeyebilirim veya temporary bir
> table içine alabilirim?
>
> Göstermek istediğim şekil şöyle;
> resultset kayitno integer, TANIMLAR varchar(2000), TUTARLAR VARCHAR(2000);
>
> 1 - TANIM1 * TANIM2 - 100 * 200
> 2 - TANIM1 - 150
> 3 - TANIM3 - 50
>
> Mysql versiyonu 5.1.11 Community
>
> Acilen bu sorunu çözmem gerekiyor.
>
> Zekeriya BOZKURT
>
> PS : Mysql de yeni olduğum için kusura bakmayin, detay verirseniz
> sevinirim.
>
>
>
> ------------------------------
> Aileniz ve arkadaşlarınızla paylaşmak için bir ayda 500'e kadar fotoğraf
> gönderin! Şimdi ücretsiz Windows Live Alanınıza gidin Buraya tıkla!<http://get.live.com/spaces/overview>
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>
-- Nesimi ACARCA www.nesimia.com
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Thu 21 Aug 2008 - 13:46:26 EEST