sql-server - T-SQL : I'm trying to get the latest row of a column but also the sum of another column

标签 sql-server tsql reporting-services

我有下表,它显示了 SalesQtyStockQtyArticle 分组, Supplier , BranchMonth .

╔════════╦════════╦══════════╦═════════╦══════════╦══════════╗
║ Month  ║ Branch ║ Supplier ║ Article ║ SalesQty ║ StockQty ║
╠════════╬════════╬══════════╬═════════╬══════════╬══════════╣
║ 201811 ║    333 ║        2 ║    3122 ║        4 ║ 11       ║
║ 201811 ║    345 ║        1 ║    1234 ║        2 ║ 10       ║
║ 201811 ║    345 ║        1 ║    4321 ║        3 ║ 11       ║
║ 201812 ║    333 ║        2 ║    3122 ║        2 ║ 4        ║
║ 201812 ║    345 ║        1 ║    1234 ║        3 ║ 12       ║
║ 201812 ║    345 ║        1 ║    4321 ║        4 ║ 5        ║
║ 201901 ║    333 ║        2 ║    3122 ║        1 ║ 8        ║
║ 201901 ║    345 ║        1 ║    1234 ║        6 ║ 9        ║
║ 201901 ║    345 ║        1 ║    4321 ║        2 ║ 8        ║
║ 201902 ║    333 ║        2 ║    3122 ║        7 ║ NULL     ║
║ 201902 ║    345 ║        1 ║    1234 ║        4 ║ 13       ║
║ 201902 ║    345 ║        1 ║    4321 ║        1 ║ 10       ║
╚════════╩════════╩══════════╩═════════╩══════════╩══════════╝

现在我想对 SalesQty 求和并获取最新 StockQty并按 Article, Supplier, Branch 分组.

最终结果应该是这样的:

╔════════╦══════════╦═════════╦═════════════╦════════════════╗
║ Branch ║ Supplier ║ Article ║ SumSalesQty ║ LatestStockQty ║
╠════════╬══════════╬═════════╬═════════════╬════════════════╣
║    333 ║        2 ║    3122 ║          14 ║           NULL ║
║    345 ║        1 ║    1234 ║          15 ║             13 ║
║    345 ║        1 ║    4321 ║          10 ║             10 ║
╚════════╩══════════╩═════════╩═════════════╩════════════════╝

我已经试过了,但它给了我一个错误,我不知道在这种情况下我必须做什么。

我做了这个例子,所以你可以自己试试。 db<>fiddle

SELECT      
    Branch, 
    Supplier,
    Article,
    SumSalesQty = SUM(SalesQty),
    -- my attempt
    LatestStockQty = (SELECT StockQty FROM TestTable i 
                      WHERE MAX(Month) = Month
                        AND TT.Branch = i. Branch
                        AND TT.Supplier = i.Branch
                        AND TT.Article = i.Branch)
FROM        
    TestTable TT
GROUP BY    
    Branch, Supplier, Article

感谢您的帮助!

最佳答案

我们可以在这里尝试使用 ROW_NUMBER 来隔离每个组的最新记录:

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY Branch, Supplier, Article
                                   ORDER BY Month DESC) rn,
        SUM(SalesQty) OVER (PARTITION BY Branch, Supplier, Article) SumSalesQty
    FROM TestTable t
)

SELECT
    Month,
    Branch,
    Supplier,
    Article,
    SumSalesQty,
    StockQty
FROM cte
WHERE rn = 1;

在我们计算的 CTE 中,为每个 Branch/Supplier/Article 分组一个行号值,最近的从 1 开始月。我们还计算同一分区的销售量总和。然后,我们只需要从该 CTE 中选择行号等于 1 的所有行。

enter image description here

Demo

关于sql-server - T-SQL : I'm trying to get the latest row of a column but also the sum of another column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923664/

相关文章:

reporting-services - SSRS 除以零错误表达式

sql-server - SSRS 动态字符串表达式

sql-server - 如何在 OPENROWSET(BULK...) 中动态指定文件路径?

sql-server - 使用 SQL Server 2000 INSERT INTO @TABLE EXEC @query

sql-server - 此SQL中的语法错误在哪里?

sql-server - Varchar 和 nvarchar 隐式转换为 int 的不同之处

sql - 如何在SQL Server中将自定义字符串转换为日期

internet-explorer - 报告服务打印崩溃 IE

java - 如何在 java eclipse 中刷新 JTable 后从 JTABLE 获取值并将其传递给文本字段

c# - 如何使用 Angular 和 ASP.Net Core 转换字节数组 [] 中的文件并存储在数据库中?