J'ai encore un problème: D un peu d'information en premier: en essayant de copier les données d'une table vers une autre table (la structure est la même). maintenant une cellule doit être incrémentée, beginns par groupe à 1 (comme un histroy).Comptage d'une cellule par objet
i ont cette table:
create table My_Test/My_Test2 (
my_Id Number(8,0),
my_Num Number(6,0),
my_Data Varchar2(100));
(mon_id, my_Num est un PK imbriquée)
si je veux insérer une nouvelle ligne, je dois vérifier si la valeur my_id
existe déjà. Si cela est vrai, je dois utiliser le my_Num
suivant pour cet ID.
j'ai dans mon tableau:
My_Id My_Num My_Data
1 1 'test1'
1 2 'test2'
2 1 'test3'
si j'ajouter maintenant une ligne pour my_Id
1, la ligne ressemblera à ceci: j'ai dans mon tableau:
My_Id My_Num My_Data
1 3 'test4'
cela semble assez facile, maintenant je dois le faire dans un SQL et sur SQL Server j'ai eu le même problème et j'ai utilisé ceci:
Insert Into My_Test (My_Id,My_Num,My_Data)
SELECT my_Id,
(
SELECT
CASE (
CASE MAX(a.my_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
WHEN NULL
THEN 1
ELSE (
CASE MAX(a.My_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
END
From My_Test A
where my_id = 1
)
,My_Data
From My_Test2 B
where my_id = 1;
this Select renvoie null si aucune ligne n'est trouvée dans la sous-sélection
Y a-t-il un moyen pour que je puisse utiliser max dans le cas? et si elle renvoie null, elle doit utiliser 0 ou 1?
Edit: Im usung maintenant ceci:
Insert INTO My_Test (My_Id,My_Num,My_Data)
SELECT B.My_Id,
(
SELECT COALESCE(MAX(a.My_Num),0) + b.my_Num
FROM My_Test A
Where a.My_Id = b.My_Id)
,b.My_Data
FROM My_Test2 B
WHERE My_Id = 1
THX à Bharat et OMG Poneys
salue
Auro
Cela fonctionne mais si l'ID n'existe pas dans le tableau, toutes les lignes insérées auront un 'null'. – domiSchenk
Je pense que vous devez créer un ID comme clé primaire. – Bharat
L'ID est un PK groupé avec my_Num – domiSchenk