【发布时间】:2023-03-08 04:32:01
【问题描述】:
这是我的查询
SELECT DateName
,SubTotal
,Discount
,TotalAmount
,Investment
,(CASE WHEN Expense.expense IS NULL THEN 0 ELSE Expense.expense END) + (CASE WHEN MonthlyExpense.Expense IS NULL THEN 0 ELSE Monthlyexpense.Expense END) Expense
,Profit - ((CASE WHEN Expense.expense IS NULL THEN 0 ELSE Expense.expense END) + (CASE WHEN MonthlyExpense.Expense IS NULL THEN 0 ELSE Monthlyexpense.Expense END)) AS NetProfit
,TotalAmount - ((CASE WHEN Expense.expense IS NULL THEN 0 ELSE Expense.expense END) + (CASE WHEN MonthlyExpense.Expense IS NULL THEN 0 ELSE Monthlyexpense.Expense END)) AS NetCash
FROM (
SELECT datepart(month, SaleDate) Month
,datename(year, SaleDate) Year
,datename(month, SaleDate) + '-' + datename(year, SaleDate) AS DateName
,SUM(SubTotal) SubTotal
,SUM(Discount) AS Discount
,SUM(TotalAmount) AS TotalAmount
,SUM(Investment) AS Investment
,SUM(Profit) AS Profit
FROM (
SELECT TOP 100 PERCENT NS.SaleID
,SaleDate
,Max(NS.SubTotal) AS SubTotal
,Max(NS.Discount) AS Discount
,Max(NS.TotalAmount) AS TotalAmount
,SUM(NSD.Investment) AS Investment
,SUM(NSD.Profit) - Max(NS.Discount) AS Profit
FROM [Sales] NS
INNER JOIN [SalesDetail] NSD ON NS.SaleID = NSD.SaleID
WHERE NS.SaleDate >= '01-06-2015 08:45:59 PM'
AND NS.SaleDate < '01-06-2015 12:00:00 AM'
GROUP BY NS.SaleID
,SaleDate
ORDER BY DatePart(month, SaleDate)
) T
GROUP BY datename(year, SaleDate)
,datepart(month, SaleDate)
,datename(month, SaleDate) + '-' + datename(year, SaleDate)
) Revenue
LEFT JOIN (
SELECT datepart(month, ExpenseDate) Month
,datename(year, ExpenseDate) Year
,SUM(Amount) AS Expense
FROM DailyExpenses
WHERE ExpenseDate >= '01-06-2015 08:45:59 PM'
AND ExpenseDate < '01-06-2015 12:00:00 AM'
GROUP BY datepart(month, ExpenseDate)
,datename(year, ExpenseDate)
) Expense ON Expense.Month = Revenue.Month
AND Expense.Year = Revenue.Year
LEFT JOIN (
SELECT Month
,[Year]
,SUM(Amount) AS Expense
FROM MonthlyExpenses
WHERE ExpenseDate >= '01-06-2015 08:45:59 PM'
AND ExpenseDate < '01-06-2015 12:00:00 AM'
GROUP BY Month
,[Year]
) MonthlyExpense ON MonthlyExpense.Month = Revenue.Month
AND MonthlyExpense.Year = Revenue.Year
这里月份和年份是合并的。 Here is the output which i have. 不知道在哪里下订单。我想按月-年顺序获得结果。
January-2015
February-2015
March-2015
----
---
---
February-2018
March-2018
April-2018
【问题讨论】:
-
您应该可以在查询末尾添加
ORDER BY Month, Year。 -
由于月份和年份列未列出是选择查询,因此不允许。
-
您知道
TOP 100 PERCENT有效地告诉SQL Server 它可以忽略关联的ORDER BY。子查询不能被排序,并且你写的任何声称这样做的东西都没有。
标签: sql sql-server sql-order-by