OrderHeader. *, COUNT (OrderDetail) из подзапроса - PullRequest
0 голосов
/ 21 мая 2009

Был дан ответ на предыдущий вопрос о получении идентификатора заказа и количества связанных позиций. Теперь я хотел бы получить остальные поля в строке OrderHeader.

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 ]

3 голосов
/ 21 мая 2009
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 голосов
/ 22 мая 2009
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
0 голосов
/ 21 мая 2009

Как насчет:

select oh.*, (
    select count(*) 
    from OrderDetail 
    where OrderHeaderID = oh.OrderHeaderID) as CountOfOrderDetail
from OrderHeader oh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...