2009-08-13 9 views
1

J'ai une table définie par:Insérer Max Valeur de la colonne dans une autre colonne

create table apple(

A number, 

B number); 

Maintenant, je dois obtenir des valeurs dans le tableau comme suit:

A  B 
------------------ 
1  4(max of A) 
2  4(max of A) 
3  4(max of A) 
4  4(max of A) 

Comment puis-je insérer ces lignes, en faisant B la valeur maximale de A?

Répondre

5

Welp, tout d'abord que vous souhaitez insérer 1-4 dans votre table:

insert into apple (a) values (1) 
insert into apple (a) values (2) 
insert into apple (a) values (3) 
insert into apple (a) values (4) 

Ensuite, vous allez vouloir mettre à jour votre table pour définir b:

update apple set b = (select max(a) from apple) 

Comme vous peut voir, c'est un processus en deux parties. Vous ne pouvez pas obtenir le maximum de a tant que vous n'avez pas créé cette colonne!

+1

+1 Exactement. Ce n'est pas un processus INSERT mais plutôt un processus UPDATE qui se passe sur une table déjà insérée :) –

0

Et bien sûr, si vous êtes désireux d'avoir une instruction select pour saisir cet autre champ, utilisez la clause OVER:

SELECT a, MAX(a) OVER() as b 
FROM table; 

Modifié:

Et pour une table existante, vous pouvez faire :

UPDATE t SET b = maxcnt 
FROM (
    SELECT *, MAX(a) OVER() as maxcnt 
    FROM table 
    ) t; 

(Je pense que cela fonctionne dans Oracle ... vraiment bien dans MS-SQL)

Rob

+0

merci beaucoup –

0

Depuis la version 11g, vous pouvez utiliser colums virtuels (leurs valeurs calculées en temps réel) Alors que vous devriez changer votre définition de la colonne comme suit:

create table apple (
A number, 
B number GENERATED ALWAYS AS (max(A)) VIRTUAL 
); 

Je n'ai pas 11g Oracle test, donc je ne peux pas vérifier, mais cela devrait fonctionner. Vous pouvez également utiliser la fonction définie par l'utilisateur pour la colonne virtuelle. Pour plus d'exemples et d'informations, voir http://www.oracle-base.com/articles/11g/VirtualColumns_11gR1.php

docs officiels pour Créer une table en 11g: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7002.htm

Questions connexes