2010-03-27 37 views
6

Tôi đang cố gắng nhận kết quả của COUNT dưới dạng cột trong chế độ xem của tôi. Xin vui lòng xem các truy vấn dưới đây cho một bản demo của các loại điều tôi muốn (điều này chỉ dành cho mục đích bản demo)Số lượng SQL trong dạng xem dưới dạng cột

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders 

FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 

Điều này rõ ràng không hoạt động ... nhưng tôi đã tự hỏi những gì đúng cách làm điều này sẽ?

Tôi đang sử dụng SQL Server

Trả lời

7

truy vấn của bạn sẽ thực sự có tác dụng nếu bạn loại bỏ các tham gia - nó không thực sự được sử dụng, và nó sẽ gây ra bảng ord trong inner select subquery để xung đột với bảng thứ tự mà bạn đã tham gia:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders 
FROM tblProducts prod 

Ngoài ra, bạn có thể sử dụng bảng đã kết hợp cùng với Group By:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductID) AS TotalNumberOfOrders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
GROUP BY 
    ProductID, 
    Name, 
    Description, 
    Price 
4

Hãy thử điều này:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
count(*) as totalnumberoforders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
group by 
    ProductID, 
    Name, 
    Description, 
    Price 
1

Nếu bạn chỉ quan tâm đến các sản phẩm mà đã được đặt hàng, bạn chỉ có thể thay thế các LEFT OUTER JOIN hoạt động với một INNER JOIN:

SELECT 
    prod.ProductID, 
    prod.Name, 
    prod.Description, 
    prod. Price, 
    COUNT(*) AS TotalNumberOfOrders 
FROM tblProducts prod 
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
0

này sẽ làm việc:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductId) AS TotalNumberOfOrders 
FROM tblProducts prod 
LEFT JOIN tblOrders ord 
ON prod.ProductID = ord.ProductID 
GROUP BY 
    ProductID, 
    Name, 
    Description, 
    Price 

Điều khoản "COUNT (ord.ProductId)" đảm bảo rằng nếu không tìm thấy đơn đặt hàng, TotalNumberOfOrders sẽ bằng không.

[Chỉnh sửa sau: Tôi quên mệnh đề GROUP BY. Doh!]

Các vấn đề liên quan