初学者SQL问题

时间:2011-02-16 07:17:39

标签: sql database

我参加一个简介SQL课程已经两个月了,现在已经很晚了,我正在画一个空白。

我有两张桌子,一个顾客和一个订单。对于已经发出两个或更多订单的客户,我必须将任何客户的信用额度提高百分之二十五,其中每个订单的订单金额超过250.00。

我了解如何UPDATE CreditLimit * 1.25 and Cust with an order > 250,但如何判断他们是否已经发出超过250的两个订单呢?

第二个问题,我们刚刚开始接受子查询,我很难将它带入我的头骨。我们班级教授提出的另一个问题是增加订单超过其信用额度的客户的信用额度。 (信用限额在客户表中,订单和金额在订单表上)。然后,我接受该客户并更新他的CreditLimit +1000。

3 个答案:

答案 0 :(得分:2)

对于第一部分:使用GROUP BY customerID和SUM所有交易。然后,您可以获得所有交易总计超过250的客户帐户。

SELECT CustomerID 
FROM t_customers c INNER JOIN t_orders o ON c.CustomerID=o.CustomerID 
GROUP BY CustomerID 
HAVING SUM(TransactionAmnt) > 250;

有关子查询的更多信息,请参阅此文章:http://msdn.microsoft.com/en-us/library/ms189575.aspx

答案 1 :(得分:2)

我假设'已经发了两个订单'暗示他们至少订了两个订单。如果恰好是2,则ofc = 2。

编辑:根据Ravi的解释,“超过250的2个订单”也可能意味着客户的累计支出。这当然是为什么模棱两可的要求会下沉项目。

UPDATE c
SET c.CreditLimit = c.CreditLimit * 1.25
FROM Customers c
WHERE 
(SELECT COUNT(*) FROM Orders o WHERE o.CustomerId = c.CustomerId AND o.OrderAmount > 250)
>= 2

答案 2 :(得分:1)

UPDATE Customers
SET CreditLimit = CreditLimit * 1.25
FROM (
  SELECT CustomerId
  FROM Orders
  WHERE OrderTotal > 250
  HAVING COUNT(*) >= 2
) o
WHERE o.CustomerId = Customers.Id