1

Foxpro アプリケーションを .NET に変換しようとしています。その変換の一環として、データを DBF テーブルから SQL サーバーに変換しています。

Orders テーブル、FirstOrder および LastOrder に基づいて、Customer テーブルにいくつかの新しいフィールドを作成する必要があります。

TSqlでこれを行う方法を混乱させることはできません。私は Foxpro でそれを行う方法を知っています。また、必要に応じて実際にそこで行うこともできますが、Sql でこれを行う方法を学ぶ必要があることはわかっています。

これが基本構造です。Customer テーブルには Id があり、更新が必要な FirstOrder フィールドと LastOrder フィールドがあります。Order Table には OrderDate がありますが、これが実際の曲線です。顧客 ID は、注文内の 5 つの異なるフィールド (ShipperId、PickupId、ConsigneeId、DeliveryId、または BillingId) に存在できます。

次のようなものです:

UPDATE customers
SET FirstOrderDate = 
(Select MIN(OrderDate)
FROM Orders o
WHERE o.ShipperId = Customers.Id or
o.PickupId = Customers.Id or
o.ConsigneeId = Customers.Id or
o.DeliveryId = Customers.Id or
o.BillingId = Customers.Id)

サブクエリをメインの更新クエリと結び付ける方法を見つけることができないようです。

ありがとう - シド


編集: MarkD の提案に基づいて機能している SELECT は次のとおりです。

Select C.Id,Min(o.OrderDate) as firstorder, MAX(o.OrderDate) as lastorder
from Customers C
JOIN Orders o
on o.ShipperId = C.Id or
        o.PickupId = C.Id or
        o.ConsigneeId = C.Id or
        o.DeliveryId = C.Id or
        o.BillingId = C.Id 
GROUP BY C.Id

では、これをサブクエリまたはカーソルとして使用して、Customers テーブルにポストバックしますか?

4

2 に答える 2

2

基準は非常にありそうにないと思いますJOINが、これをやろうとしているように見えますか?

編集:JOIN基準を変更しましたが、これがあなたの求めているものです。 Grouping Byされている列ORは奇数です。

;WITH MinOrderDates AS
(
    SELECT   CustID 
            ,OrderDate  = MIN(OrderDate)
    FROM Orders
    GROUP BY CustID
)

UPDATE C
SET FirstOrderDate = MIN(O.OrderDate)
FROM Customers      C
JOIN MinOrderDates  O   ON C.Id = O.CustID

ORこれは、クエリがsでどのように見えるかです

;WITH MinOrderDates AS
(
    SELECT   ShipperId
            ,PickupId
            ,ConsigneeId
            ,DeliveryId
            .BillingId
            ,OrderDate  = MIN(OrderDate)
    FROM Orders
    GROUP BY ShipperId
            ,PickupId
            ,ConsigneeId
            ,DeliveryId
            .BillingId
)

UPDATE C
SET FirstOrderDate = MIN(O.OrderDate)
FROM Customers      C
JOIN MinOrderDates  O   ON o.ShipperId     = C.Id or
                           o.PickupId      = C.Id or
                           o.ConsigneeId   = C.Id or
                           o.DeliveryId    = C.Id or
                           o.BillingId     = C.Id 

編集:投稿された構文の誤りを見つけるのに苦労していますが。

于 2013-01-12T16:15:24.843 に答える
0

これを試して

UPDATE customers
SET FirstOrderDate = 
(Select MIN(OrderDate)
FROM Orders
WHERE ShipperId = Customers.Id or
PickupId = Customers.Id or
ConsigneeId = Customers.Id or
DeliveryId = Customers.Id or
BillingId = Customers.Id)
于 2015-07-05T09:22:12.710 に答える