0

製品が最初に注文された日付とこの製品の注文数量を含む2つの列を含むすべての製品のリストが必要です。

構造:
tbl_product
-productID
-productName

tbl_orderProduct
-orderProductID
-orderID
-productID-
数量

tbl_order
--orderID
--orderedDate

SELECT p.productName, firstOrder.orderedDate FROM tbl_product p
LEFT JOIN(
    SELECT op.productID, MIN(o.orderedDate) AS orderedDate FROM tbl_orderProduct op
    JOIN tbl_order o ON op.orderID = o.orderID
    GROUP BY op.productID
)
firstOrder ON firstOrder.productID = p.productID

日付を取得する最初の試みはこれまでのところ機能しますが、注文を取得してからtbl_orderProductに戻って数量を取得する必要があるため、数量を取得する方法がわかりません。
一意ではない可能性があるため、firstOrder.ordererdDateを介してselectで注文を取得したくありません。

また、orderIDを「LeftJoin」のselectで渡すこともできません。これは、「Group By」にも追加する必要があるため、製品を含むすべての注文の行が返されるためです。したがって、どういうわけか、最初の注文からorderIDまたはorderProductIDを取得する必要があります。

前もって感謝します!

4

1 に答える 1

0

少なくともSQL-Server2005を使用していると仮定すると、次のROW_NUMBER関数でcommon-table-expressionを使用できます。

WITH CTE AS
(
   SELECT p.productName, o.orderedDate, quantity
   , RN = ROW_NUMBER() OVER ( PARTITION BY p.productID ORDER BY o.orderedDate )
   FROM tbl_product p 
   INNER JOIN tbl_orderProduct op ON p.productID=op.productID
   INNER JOIN tbl_order o ON op.orderID=o.orderID
)
SELECT * FROM CTE WHERE RN = 1
于 2012-07-27T15:19:46.987 に答える