我在编写此 sql 查询时遇到问题。基本上,我需要找到在过去 365 天内拥有最多 nSales,但在 365 天内销售额为零的前 100 家公司。这是在节点中完成的,所以它是一个字符串,我也在传递参数。开始日期是 365 天前的日期。
当我运行它时不会抛出任何错误,但它也不会返回任何数据。
getMostSales365NoneBefore(startDate) {
let sqlQuery = '';
sqlQuery =
"SELECT TOP 100 SUM(nQuoteTotal) AS nSales, sCompany FROM Customer_Quotes WHERE (bDeleted=0 AND sStatus='Closed' AND dtFirstClosed > " +
"'" +
startDate +
"')" +
' AND (nSales < ' +
"'" +
startDate +
"') IS NOT NULL" +
' GROUP BY sCompany ORDER BY nSales DESC';
console.log(sqlQuery);
return sqlQuery;
}, ```
答案 0 :(得分:1)
您应该正确地参数化您的查询,并将 @startDate
作为参数传递。
请注意,您不能在 WHERE
部分中引用聚合,只能在 HAVING
、ORDER BY
或 SELECT
中引用
你想要的查询看起来像这样
SELECT TOP (100)
SUM(CASE WHEN dtFirstClosed >= @startDate THEN nQuoteTotal END) AS nSales,
sCompany
FROM Customer_Quotes
WHERE bDeleted = 0
AND sStatus = 'Closed'
GROUP BY sCompany
HAVING COUNT(CASE WHEN dtFirstClosed < @startDate THEN 1 END) = 0
ORDER BY nSales DESC