2009-05-21 10 views
0

OrderIDと関連する広告申込情報の数の取得に関する以前の質問が回答されました。 これでOrderHeader行の残りのフィールドを取得したいと思います。OrderHeader。*、サブクエリからのCOUNT(OrderDetail)

についてどのように
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.OrderDetail') AND type in (N'U')) 
DROP TABLE OrderDetail 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.OrderHeader') AND type in (N'U')) 
DROP Table OrderHeader 
GO 
    CREATE TABLE OrderHeader(
    OrderHeaderID Int Primary Key Identity(10,1), 
    CustID Int, 
    OrderDate DateTime default getdate(), 
    OrderTypeID Int default 0, -- References OrderType 
    OrderGroupID Int Default 0, -- References OrderGroup 
    OrderCatID Int Default 0 -- References OrderCat 
    ) 
    GO 
    CREATE TABLE OrderDetail(
    OrderDetailID Int Primary Key Identity(100,1), 
    OrderHeaderID Int REFERENCES OrderHeader, 
    ItemID Int) 
    GO 
    DECLARE @OrderHeaderID Int 
    INSERT INTO OrderHeader(CustID) VALUES(1000) 
    INSERT INTO OrderHeader(CustID) VALUES(1001) 
    SET @OrderHeaderID=SCOPE_IDENTITY() 
    INSERT INTO OrderDetail(OrderHeaderID,ItemID) VALUES(@OrderHeaderID,3) 
    INSERT INTO OrderDetail(OrderHeaderID,ItemID) VALUES(@OrderHeaderID,4) 
    GO 
    -- This query gives me the number of line items per order 
    SELECT OH.OrderHeaderID,COUNT(OD.OrderHeaderID) AS CountOfOrderDetail 
    FROM OrderHeader OH 
    LEFT JOIN OrderDetail OD 
    ON OD.OrderHeaderID = OH.OrderHeaderID 
    GROUP BY OH.OrderHeaderID 
    /* 
    This is where I need help 
    I would like a query to show 
    SELECT OrderHeader.*,CountOfOrderDetail 
    */ 

答えて

3
SELECT 
    OrderHeader.*, 
    OrderDetailCount.CountOfOrderDetail 
FROM OrderHeader 
JOIN (
    SELECT 
     OH.OrderHeaderId, 
     COUNT(OD.OrderHeaderID) AS CountOfOrderDetail  
    FROM OrderHeader OH  
    LEFT JOIN OrderDetail OD ON 
     OD.OrderHeaderID = OH.OrderHeaderID  
    GROUP BY OH.OrderHeaderID 
) as OrderDetailCount ON 
    OrderHeader.OrderHeaderId = OrderDetailCount.OrderHeaderId 
+0

今さえずりが –

0

: "!StackOverflowの素晴らしいおかしくている"

select oh.*, (
    select count(*) 
    from OrderDetail 
    where OrderHeaderID = oh.OrderHeaderID) as CountOfOrderDetail 
from OrderHeader oh 
0
SELECT h.OrderHeaderID, 
     h.CustID, 
     h.OrderDate, 
     h.OrderTypeID, 
     h.OrderGroupID, 
     h.OrderCatID, 
     COUNT(*) 
FROM OrderHeader h 
JOIN OrderDetail d ON h.OrderHeaderId = d.OrderHeaderId 
GROUP BY h.OrderHeaderID, 
     h.CustID, 
     h.OrderDate, 
     h.OrderTypeID, 
     h.OrderGroupID, 
     h.OrderCatID 
関連する問題