Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction d'incrémentation...

9 réponses
Avatar
PePiCK
Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété, une numéro de séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour chaque produit pour que ca donne quelque chose
du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire incrémenter pour chaque produit ?


PePiCK

9 réponses

Avatar
Med Bouchenafa
Quelque chose comme ceci devrait faire l'affaire à quelques modifications
près

SELECT
[numéro de produit] = NumProduit,
[numéro de propriété] = NumProperty,
[numéro de séquence] = ( SELECT count( NumProduit ) + 1 FROM tblTest B
WHERE A.NumProduit = B.NumProduit AND A.NumProperty > B.NumProperty )
FROM tblTest A
GROUP BY NumProduit, NumProperty

--
Bien cordialement
Med Bouchenafa

"PePiCK" a écrit dans le message de news:

Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété, une numéro de
séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour chaque produit pour
que ca donne quelque chose du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire incrémenter pour
chaque produit ?


PePiCK






Avatar
bruno reiter [MVP]
à la création ou à la lecture?

br

"PePiCK" wrote in message
news:
Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété, une numéro de


séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour chaque produit pour


que ca donne quelque chose
du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire incrémenter pour


chaque produit ?


PePiCK






Avatar
Jean-Nicolas BERGER
Personnellement, j'aurais tendance à utiliser un Trigger.
Pour l'Insert, c'est assez simple.
Quand à l'Update et au Delete, ça risque d'être un peu plus chaud en termes
d'algorithmie (et de lenteur de code), surtout si l'on cherche à ne pas
laisser de trous dans la numérotation...
JN.


"PePiCK" a écrit dans le message de news:

Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété, une numéro de
séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour chaque produit pour
que ca donne quelque chose du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire incrémenter pour
chaque produit ?


PePiCK






Avatar
PePiCK
Toujours à l'insert.
C'est une table un temporaire, aucune mise a jour de la table, si il y a une mise a jour a faire, je
fait un delete + un insert.
Bon je regarde du coté d'un trigger !


"bruno reiter [MVP]" <remove.this! wrote in message
news:
à la création ou à la lecture?

br

"PePiCK" wrote in message
news:
Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété, une numéro de


séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour chaque produit pour


que ca donne quelque chose
du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire incrémenter pour


chaque produit ?


PePiCK










Avatar
bruno reiter [MVP]
EFFECTIVEMENT UN TRIGGER

tu risques juste d'avoir des pb en insertion multilignes

br

"PePiCK" wrote in message
news:
Toujours à l'insert.
C'est une table un temporaire, aucune mise a jour de la table, si il y a


une mise a jour a faire, je
fait un delete + un insert.
Bon je regarde du coté d'un trigger !


"bruno reiter [MVP]" <remove.this! wrote in message
news:
>à la création ou à la lecture?
>
> br
>
> "PePiCK" wrote in message
> news:
>> Bon j'essai d'expliquer le problème...
>> Une requête qui me crée un table.
>> Pour faire simple,
>> 3 champs, un numéro de produit, un numéro de propriété, une numéro de
> séquence.
>> un produit donné peux avoir plusieurs propriétés.
>>
>> 11111111, 800, x
>> 11111111, 900, x
>> 11111111, 1500, x
>> 22222222, 0, x
>> 33333333, 700, x
>> 33333333, 1500, x
>>
>> Je voudrais avoir une fonction qui incrémente x pour chaque produit


pour
> que ca donne quelque chose
>> du genre.
>>
>> 11111111, 800, 1
>> 11111111, 900, 2
>> 11111111, 1500, 3
>> 22222222, 0, 1
>> 33333333, 700, 1
>> 33333333, 1500, 2
>>
>> Le tout directement dans SQL.
>> Probablement une Function... mais comment lui faire incrémenter pour
> chaque produit ?
>>
>>
>> PePiCK
>>
>>
>>
>>
>
>




Avatar
salut

SI tu as SQL server 2000 ou plus recent, tu peux créer une
focntion avec comme parametre le numeros de produit. Dans
celle-ci, tu selection le numeros de sequence le plus
élevè pour le produit et tu l'incrementes.


cordialement,
coolben

-----Message d'origine-----
à la création ou à la lecture?

br

"PePiCK" wrote in message
news:
Bon j'essai d'expliquer le problème...
Une requête qui me crée un table.
Pour faire simple,
3 champs, un numéro de produit, un numéro de propriété,




une numéro de
séquence.
un produit donné peux avoir plusieurs propriétés.

11111111, 800, x
11111111, 900, x
11111111, 1500, x
22222222, 0, x
33333333, 700, x
33333333, 1500, x

Je voudrais avoir une fonction qui incrémente x pour




chaque produit pour
que ca donne quelque chose
du genre.

11111111, 800, 1
11111111, 900, 2
11111111, 1500, 3
22222222, 0, 1
33333333, 700, 1
33333333, 1500, 2

Le tout directement dans SQL.
Probablement une Function... mais comment lui faire




incrémenter pour
chaque produit ?


PePiCK








.



Avatar
PePiCK
Bon je reviens sur le sujet car je ne suis toujours pas parvenus a faire un
incrémention de mes enregistrements.
Bon, pour la question du moins passé, je m'en suis sorti autrement, ne vous
en faite pas... :)

Mais je reviens avec le meme probleme aujourd'hui...:(

J'ai pas essayé le trigger, je ne crois pas qu'il puisse s'appliquer au cas
présent.

Une Table KitItem
Kit et ItemNo sont PRIMARY KEY

Je dois insérer plusiseurs nouveaux items ( Supposons un function qui crée
les items de Kit 00001 dans Kit 00000)

Donc j'ai:

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000

KITID ; ITEMNO
00001 ; 1 -- Item1 du Kit 00001
00001 ; 2 -- Item2 du Kit 00001
00001 ; 3 -- Item3 du Kit 00001
00001 ; 4 -- Item4 du Kit 00001

Résultat voulu

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 5 -- Item2 du Kit 00001
00000 ; 6 -- Item3 du Kit 00001
00000 ; 7 -- Item4 du Kit 00001

Requête d'insertion...
INSERT INTO tblKitItem ( KitID, ItemNo )
SELECT '00000', dbo.PMax(KitID),
FROM tblKitItem
WHERE KitID = ' 00001'

Function...
CREATE FUNCTION PMax(@KitID varchar(10)) RETURNS int AS
BEGIN
Declare @l int
SELECT @l = Max(ItemNo) + 1
FROM tblKitItem
WHERE KitID = @KitID
RETURN @l
END

Ceci me retourne
KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 4 -- Item2 du Kit 00001
00000 ; 4 -- Item3 du Kit 00001
00000 ; 4 -- Item4 du Kit 00001

Donc ca plante, il incrément selement le premier, ce qui peu être très
logique car SQL traite la batch avant d'insérer les données dans la table.

Mais comment arriver à mon résultat voulu ???
Je galère vraiment la... :(
Merci de m'éclairé.

PePiCK
Avatar
PePiCK
Bon, j'y suis parvenu !

CREATE PROC proc_ImportKitItem(...) AS
Declare @ix int

SELECT @ix = Max(ItemNo) FROM tblKitItem WHERE KitID = @KitID

INSERT INTO tblKitItem ( KitID, ItemNo)
SELECT '00000', @ix + (SELECT Count(b.ItemNo) FROM tblESTKitItem b WHERE
a.KitID = b.KitID AND b.ItemNo <= a.ItemNo)
FROM tblESTKitItem a
WHERE KitID='00001'

Je ne sais pas si c'est la façon la plus efficace, mais elle marche très
bien ! :)

PePiCK


"PePiCK" wrote in message
news:%
Bon je reviens sur le sujet car je ne suis toujours pas parvenus a faire
un incrémention de mes enregistrements.
Bon, pour la question du moins passé, je m'en suis sorti autrement, ne
vous en faite pas... :)

Mais je reviens avec le meme probleme aujourd'hui...:(

J'ai pas essayé le trigger, je ne crois pas qu'il puisse s'appliquer au
cas présent.

Une Table KitItem
Kit et ItemNo sont PRIMARY KEY

Je dois insérer plusiseurs nouveaux items ( Supposons un function qui crée
les items de Kit 00001 dans Kit 00000)

Donc j'ai:

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000

KITID ; ITEMNO
00001 ; 1 -- Item1 du Kit 00001
00001 ; 2 -- Item2 du Kit 00001
00001 ; 3 -- Item3 du Kit 00001
00001 ; 4 -- Item4 du Kit 00001

Résultat voulu

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 5 -- Item2 du Kit 00001
00000 ; 6 -- Item3 du Kit 00001
00000 ; 7 -- Item4 du Kit 00001

Requête d'insertion...
INSERT INTO tblKitItem ( KitID, ItemNo )
SELECT '00000', dbo.PMax(KitID),
FROM tblKitItem
WHERE KitID = ' 00001'

Function...
CREATE FUNCTION PMax(@KitID varchar(10)) RETURNS int AS
BEGIN
Declare @l int
SELECT @l = Max(ItemNo) + 1
FROM tblKitItem
WHERE KitID = @KitID
RETURN @l
END

Ceci me retourne
KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 4 -- Item2 du Kit 00001
00000 ; 4 -- Item3 du Kit 00001
00000 ; 4 -- Item4 du Kit 00001

Donc ca plante, il incrément selement le premier, ce qui peu être très
logique car SQL traite la batch avant d'insérer les données dans la table.

Mais comment arriver à mon résultat voulu ???
Je galère vraiment la... :(
Merci de m'éclairé.

PePiCK



Avatar
Steve Kass
SELECT
'00000' AS KITID,
(
SELECT COUNT(*) FROM tblKitItem as K2
WHERE (
K2.KITID < K1.KITID
OR (K2.KITID = K1.KITID AND K2.ITEMNO <= K1.ITEMNO)
) AND K2.KITID IN ('00000', '00001')
) AS ITEMNO
FROM tblKitItem AS K1
WHERE KITID IN ('00000', '00001')

[pas testée]

Steve Kass
Drew University


PePiCK wrote:

Bon je reviens sur le sujet car je ne suis toujours pas parvenus a faire un
incrémention de mes enregistrements.
Bon, pour la question du moins passé, je m'en suis sorti autrement, ne vous
en faite pas... :)

Mais je reviens avec le meme probleme aujourd'hui...:(

J'ai pas essayé le trigger, je ne crois pas qu'il puisse s'appliquer au cas
présent.

Une Table KitItem
Kit et ItemNo sont PRIMARY KEY

Je dois insérer plusiseurs nouveaux items ( Supposons un function qui crée
les items de Kit 00001 dans Kit 00000)

Donc j'ai:

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000

KITID ; ITEMNO
00001 ; 1 -- Item1 du Kit 00001
00001 ; 2 -- Item2 du Kit 00001
00001 ; 3 -- Item3 du Kit 00001
00001 ; 4 -- Item4 du Kit 00001

Résultat voulu

KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 5 -- Item2 du Kit 00001
00000 ; 6 -- Item3 du Kit 00001
00000 ; 7 -- Item4 du Kit 00001

Requête d'insertion...
INSERT INTO tblKitItem ( KitID, ItemNo )
SELECT '00000', dbo.PMax(KitID),
FROM tblKitItem
WHERE KitID = ' 00001'

Function...
CREATE FUNCTION PMax(@KitID varchar(10)) RETURNS int AS
BEGIN
Declare @l int
SELECT @l = Max(ItemNo) + 1
FROM tblKitItem
WHERE KitID = @KitID
RETURN @l
END

Ceci me retourne
KITID ; ITEMNO
00000 ; 1 -- Item1 du Kit 00000
00000 ; 2 -- Item2 du Kit 00000
00000 ; 3 -- Item3 du Kit 00000
00000 ; 4 -- Item1 du Kit 00001
00000 ; 4 -- Item2 du Kit 00001
00000 ; 4 -- Item3 du Kit 00001
00000 ; 4 -- Item4 du Kit 00001

Donc ca plante, il incrément selement le premier, ce qui peu être très
logique car SQL traite la batch avant d'insérer les données dans la table.

Mais comment arriver à mon résultat voulu ???
Je galère vraiment la... :(
Merci de m'éclairé.

PePiCK