0
votes

Colonne SQL Set avec valeur dérivée

Comment définir une valeur de colonne sur "1" lorsque la somme (Price)> = 88

par exemple: Si la somme (prix) du client A est supérieure ou égale à 88, la livraison sera mise à jour comme "y " p>

Table client: Nom, prix, livraison (je n'ai indiqué que la colonne importante) p>

My SQL requête: P>

UPDATE  customer
SET delivery ='Y'
WHERE (SELECT SUM(price) FROM customer
GROUP BY name )>=88;


4 commentaires

La plupart des bases de données ne vous permettront pas de Mettre à jour Sélection des données à partir du même tableau que vous mettez à jour.


Veuillez ajouter des exemples de données et des résultats attendus. Quelques lignes iront un long chemin pour nous de comprendre votre problème.


Le plus probable (sélectionnez la somme (prix) du groupe client par nom) retournera plus de 1 lignes, donc quelle condition voulez-vous postuler?


ont ajouté une photo de ma table. Je ne sais pas comment le structurer à regarder mieux dans Stackoverflow, alors j'ai pris un instantané à la place. Excusez-moi.


4 Réponses :


0
votes

Définissez la colonne sur la valeur que vous sélectionnez dans la table et ne les regroupez pas.
Set colonne_x = (Sélectionnez la somme (prix) du client) code>

Vous utilisez désormais votre requête et il a l'air plus propre p>

UPDATE  customer
SET delivery ='Y'
WHERE COLUMN_X = >=88;


0 commentaires

0
votes

Vous ne dites pas quelle base de données que vous utilisez (ou quelle version de celle-ci), vous pouvez donc essayer si ce standard sql fonctionne dessus: xxx


0 commentaires

0
votes

essentiellement la même chose @TeMimposer vient de poster, mais avec une sous-requête au lieu d'un CTE code>.

Obtenez les noms qui qualifient d'abord, puis rejoignez cette liste pour la mise à jour Déclaration. P>

UPDATE t
  SET delivery = 'Y'
FROM
  #t AS t
JOIN
  (
    SELECT
      name
     ,SUM(price) AS total
    FROM
      #t
    GROUP BY
      name
    HAVING
      SUM(price) >= 88
  ) AS d
    ON
    d.name = t.name;


0 commentaires

0
votes

Vous n'avez pas de rejoindre entre la table que vous mettez à jour et votre sous-sélection. Votre table n'a pas vraiment de clé, mais donnée ce que vous avez montré, je le ferais comme suit: xxx

si fondamentalement, il reçoit le nom de chaque client et la somme ou de leur commande Prix ​​mais seulement où la somme est de plus de 888. Il tire alors simplement le nom de ce sous-sélection et met uniquement à jour les lignes où le nom existe dans la liste des noms des commandes de la somme de 88.


0 commentaires