2017-06-08 68 views
0

我试图做一个查询,输出一个列表公司的数据和每个公司的产品和折扣的数量,并按product_count排序。 此外,我需要将输出限制为每组30行MSSQL - OVER,ROW_NUMBER()和ORDER BY错误

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 
+0

提供的表结构来帮助你解决问题〜 –

+0

你必须尝试把PRODUCT_COUNT在你的选择statment.you有cuase你的孩子选择statment创建它使用它的父statment。 –

+0

你使用的是MySQL还是MS SQL Server? – jarlh

回答

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 
+0

谢谢!!这就是我一直在寻找。 – driconmax