MSSQL - OVER,ROW_NUMBER()和ORDER BY错误

时间:2017-06-08 14:08:31

标签: sql sql-server window-functions

我试图通过product_count输出一个列表,其中包含公司数据以及每个公司的产品和折扣数量以及订单。 此外,我需要将输出限制为30行的组

SELECT * FROM (
    SELECT *, (
        SELECT COUNT(*) FROM Products WHERE Product_Comp_id = Comp_id
    ) as product_count, (
        SELECT COUNT(*) FROM Discount WHERE Disc_Comp_id = Comp_id
    ) as discount_count , ROW_NUMBER() OVER (
        ORDER BY product_count ASC
    ) AS RowNum FROM Company
) AS finalTable WHERE finalTable.RowNum BETWEEN 0 AND 30

但是我得到了这个错误

  

列名称无效' product_count'。

表格结构

Products
    |-Product_id
    |-Product_Name
    |-Product_Description
    |-Product_Comp_id

Discount
    |-Disc_id
    |-Disc_Name
    |-Disc_Comp_id
    |-Disc_Ammount

Company
    |-Comp_id
    |-Comp_Name
    |-Comp_Address

1 个答案:

答案 0 :(得分:1)

您需要额外级别的子查询才能为您提供product_count。

SELECT * FROM (
    SELECT * , ROW_NUMBER() OVER (ORDER BY product_count ASC) AS RowNum
    FROM 
    (
        SELECT *, (SELECT COUNT(*) FROM Products WHERE Product_Comp_id = Comp_id) as product_count, 
        (SELECT COUNT(*) FROM Discount WHERE Disc_Comp_id = Comp_id) as discount_count
        FROM Company
    ) C
) AS finalTable WHERE finalTable.RowNum BETWEEN 0 AND 30