Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 11h02   #1
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
Par défaut erreur sur une sous requête

bonjour;
je veux insérer des lignes a partir des lignes déjà existante dans la même table mais j'ai l'erreur suivante:

Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.


Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
INSERT INTO [REP-DW].[dbo].[MaTable]
           ([Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,[Valeur]
           ,[date])
 
SELECT 
          [Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           , (SELECT Valeur FROM Matable WHERE MoisId = 11 + SELECT Valeur FROM Matable WHERE MoisId = 12)AS Valeur
           ,getdate ()
  FROM   Matable

merci d'avance
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h24   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
La requete imbriquée
Code :
(SELECT Valeur FROM Matable WHERE MoisId = 11 + SELECT Valeur FROM Matable WHERE MoisId = 12)AS valeur
Retourne plus d'un résultat... c'est interdit...
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h36   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Testez ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO [REP-DW].[dbo].[MaTable]
           ([Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,[Valeur]
           ,[date])
 
SELECT 
          [Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           , ISNULL((SELECT SUM(Valeur) AS Valeur FROM Matable WHERE MoisId BETWEEN 11 AND 12),0) AS Valeur
           ,getdate ()
  FROM   Matable
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h37   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
NB: je suis parti du principe que "valeur" était compatible avec le SUM...
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h56   #5
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
votre proposition ça marche nickel.
toutefois quand je veux faire une division ou une soustraction de valeur, comment dois je faire.

par exemple:

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
INSERT INTO [REP-DW].[dbo].[MaTable]
           ([Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,[Valeur
           ,[date])
 
SELECT 
          [Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           , (SELECT Valeur FROM Matable WHERE MoisId = 11 - SELECT Valeur FROM Matable WHERE MoisId = 12)AS Valeur
           ,getdate ()
  FROM   Matable
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 12h00   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Quel est le but de cet insertion? à quoi vous sert la table ainsi alimentée? vous inserez un résultat constant (difference ou somme en novembre et janvier) dans toutes les lignes de la table...


Je suppute une modélisation pas tout à fait optimale (certains utiliserons d'autres termes...)

Dites nous en plus
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 12h04   #7
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
la table cible contient des indicateurs qui sont calculé a base d'indicateurs de chaque mois. et qui sont égaux soit à la somme, différence ou division d'autres indicateurs
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 12h39   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
la table cible contient des indicateurs qui sont calculé a base d'indicateurs de chaque mois. et qui sont égaux soit à la somme, différence ou division d'autres indicateurs
HUm... Passons...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO [REP-DW].[dbo].[MaTable]
           ([Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,[Valeur
           ,[date])
 
SELECT 
          [Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           , (SELECT Valeur FROM Matable WHERE MoisId = 11) - (SELECT Valeur FROM Matable WHERE MoisId = 12)AS Valeur
           ,getdate ()
  FROM   Matable
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 14h08   #9
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
ben vous venez de me corriger en haut dans le cas d'une somme donc ça ne peut pas marcher en cas de soustraction ni de division, Vu que la sous requête renvoie plusieurs valeurs.

j'ai la même erreur :

Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 14h10   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
oups
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 14h11   #11
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Dans votre table vous avez plusieurs lignes pour le mois de novembre et plusieurs pour le mois de decembre? que voulez vous faire ?
La soustraction de la somme des valeurs de novembre avec la somme de celles de decembre?


Celà?:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO [REP-DW].[dbo].[MaTable]
           ([Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,[Valeur]
           ,[date])
 
SELECT 
          [Moisid]
           ,[ProdId]
           ,[InsId]
           ,[IndicId]
           ,[CoId]
           ,ISNULL( (SELECT SUM(Valeur) AS Valeur FROM Matable WHERE MoisId=11)-(SELECT SUM(VALEUR) FROM Matable WHERE MoisId=12)),0) AS Valeur
           ,getdate ()
  FROM   Matable
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h18.


 
 
 
 
Partenaires

Hébergement Web