Sql 带计算列的Where子句

Sql 带计算列的Where子句,sql,Sql,您好,我想在这里添加一个条件,如where Date介于..和salercentage>50之间,但它salercentage不是db中的一列,它只是像下面的代码中一样强制转换 我怎么用呢。提前谢谢 var sql = @"SELECT TOP 10 sp.ProductName, SUM(sp.QtySold) AS QtySold, SUM(r.QtyinP

您好,我想在这里添加一个条件,如
where Date介于..
salercentage>50之间,但它salercentage不是db中的一列,它只是像下面的代码中一样强制转换

我怎么用呢。提前谢谢

      var sql = @"SELECT TOP 10 
                    sp.ProductName, 
                    SUM(sp.QtySold) AS QtySold,
                    SUM(r.QtyinPieces) AS StockLimit,                  
                    CAST(    (CAST    (SUM(sp.QtySold) AS FLOAT)     /    CAST(SUM(r.QtyinPieces) AS FLOAT)  ) * 100 AS DECIMAL(8,2)       ) [SalesPercentage]
                FROM 
                    Sales_productholder sp
                    JOIN Orders_productholder r ON (sp.ProductID = r.ProductID)

                GROUP BY 
                    sp.ProductName, r.ProductID, r.QtyinPieces
                ORDER BY 
                    SUM(sp.QtySold) DESC";
更新:我有一个组合框,里面有像5、10、20这样的项目,我想把它作为
Top5
的参数。但它总是导致错误
顶部附近的语法错误

以下是我尝试过的:

选择TOP@TOP

command.Parameters.AddWithValue("@Top", cboTop.SelectedItem.ToString());


您可以像这样添加
具有

HAVING
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) > 50
所有查询:

SELECT TOP 10 
    sp.ProductName, 
    SUM(sp.QtySold) AS QtySold,
    SUM(r.QtyinPieces) AS StockLimit,                  
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) [SalesPercentage]
FROM 
    Sales_productholder sp
    JOIN Orders_productholder r ON (sp.ProductID = r.ProductID)
WHERE [Date] between @DateBegin and @DateAdd
GROUP BY 
    sp.ProductName, r.ProductID, r.QtyinPieces
HAVING
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) > 50
ORDER BY 
    SUM(sp.QtySold) DESC

您可以像这样添加
具有

HAVING
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) > 50
所有查询:

SELECT TOP 10 
    sp.ProductName, 
    SUM(sp.QtySold) AS QtySold,
    SUM(r.QtyinPieces) AS StockLimit,                  
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) [SalesPercentage]
FROM 
    Sales_productholder sp
    JOIN Orders_productholder r ON (sp.ProductID = r.ProductID)
WHERE [Date] between @DateBegin and @DateAdd
GROUP BY 
    sp.ProductName, r.ProductID, r.QtyinPieces
HAVING
    CAST( (CAST ( SUM(sp.QtySold) AS FLOAT) / CAST(SUM(r.QtyinPieces) AS FLOAT) ) * 100 AS DECIMAL(8,2) ) > 50
ORDER BY 
    SUM(sp.QtySold) DESC

先生,你还在吗?我想补充一个问题。是的,我在这里,问题是什么?像这样写
选择TOP(@TOP)
再次感谢您,先生。我已先将该项目转换为int,并与(@top)一起使用。非常感谢。先生,你还在吗?我想补充一个问题。是的,我在这里,问题是什么?像这样写
选择TOP(@TOP)
再次感谢您,先生。我已先将该项目转换为int,并与(@top)一起使用。非常感谢。