2016-05-24 8 views
1

私はこのエラーを何の不運もなく何時間も克服しようとしています。オペランドには1つの列が含まれている必要があります - ケースステートメントを使用した更新と選択

UPDATE `users` t1 

SET t1.`Earnings`= (SELECT SUM(ROUND(t2.`vCost`,2)) AS totalEarned, 
(
CASE 
    WHEN t2.`vPayment` = 'CreditCard' THEN t1.`Earnings` = (t1.`Earnings` * 1.05) 
    WHEN t2.`vPayment` = 'Cash' THEN t1.`Earnings` = (t1.`Earnings` * 1.25) 
END 
) AS total 

FROM `transactions` t2 WHERE t2.`ID` = t1.`ID` AND t2.payout != 'PAIDOUT') 

現在の構造:

:::Transactions Table::: 
ID, 
UserID, 
Cost 

:::User Table::: 
ID, 
UserID, 
Earnings 

結果:

Operand should contain 1 column(s) 

現在のコード:

UPDATE `users` u 
SET u.currentPayout = (SELECT SUM(ROUND(s.vCost,2)) AS totalEarned s 
         FROM transactions s 
         WHERE s.USERID = u.USERID AND s.payout != 'PAIDOUT' 

現在のコードは、それを計算し、正常に保存し、しかし、私が欲しいですvPaymentを実装するクエリの要素。

したがって、vPaymentがCashと等しい場合は、1.25を乗算します。

答えて

0

これはあなたが探しているものですか(編集)?

UPDATE `users` u 
SET u.`Earnings` = (SELECT SUM(ROUND(s.vCost * IF(`vPayment` = 'Cash', 1.25, 1.05), 2)) 
        FROM transactions s 
        WHERE s.USERID = u.USERID AND s.payout != 'PAIDOUT' 
+0

はい、ただし、次のようになります。「SQL構文にエラーがあります。 'WHERE t2.'payout'!=' PAIDOUT '' at line 10' –

+0

@FilipBusic 'SELECT'を削除しました(構文的には正しくありませんでした) 。私は論理について確信が持てません。予想される結果とともにいくつかのサンプルデータを含めると良いでしょう。 –

+0

私はあなたの更新されたソリューションを試しましたが、結果は同じままです..私は、トランザクションテーブルと同じユーザーIDのユーザーテーブルのユーザーごとにvCostの合計を計算しようとしています。次に、計算したvCostを表1s、Earningsに設定しようとしています。私はより明確に質問を更新しました。 –

関連する問題