SQL/SSRS表达式

SQL/SSRS表达式,sql,reporting-services,Sql,Reporting Services,我正在写一份发票报告。发票上的行项目编号从一开始,并根据所购项目的数量递增。例如,发票中的第一行始终为1。第一行包含项目和计数2,因此下一行号将为3,依此类推。我已经成功地创建了其中的一部分,但在最后一行失败了。问题是最后一行号正在增加,以包括行号和最后一行上的项目计数 WITH INVOICE AS ( Select Row_Number() Over (Order By ProdNo) RowNum, Count(ProdNo) As Count, ProdNo From Orders Wh

我正在写一份发票报告。发票上的行项目编号从一开始,并根据所购项目的数量递增。例如,发票中的第一行始终为1。第一行包含项目和计数2,因此下一行号将为3,依此类推。我已经成功地创建了其中的一部分,但在最后一行失败了。问题是最后一行号正在增加,以包括行号和最后一行上的项目计数

WITH INVOICE AS (
Select Row_Number() Over (Order By ProdNo) RowNum, Count(ProdNo) As Count, ProdNo
From Orders Where OrderNo = @OrderNo
Group By ProdNo)

   Select 
   *, 
   Case 
     WHEN RowNum = '1' THEN '1'
     WHEN RowNum = '2' THEN LAG(RowNum,1,0) OVER (Order By ProdNo) + LAG(Count,1,0) OVER (Order By ProdNo)
     WHEN RowNum > '2' THE SUM(COUNT) Over(Order By ProdNo)
     End As LineNo
     From INVOICE Order By ProdNo

最后的行号应该是7,这将是该点计数的累积。然而,我似乎无法到达那里

我试过运行全速,但没有成功。我写了一个案例陈述,让我进入最后一行

WITH INVOICE AS (
Select Row_Number() Over (Order By ProdNo) RowNum, Count(ProdNo) As Count, ProdNo
From Orders Where OrderNo = @OrderNo
Group By ProdNo)

   Select 
   *, 
   Case 
     WHEN RowNum = '1' THEN '1'
     WHEN RowNum = '2' THEN LAG(RowNum,1,0) OVER (Order By ProdNo) + LAG(Count,1,0) OVER (Order By ProdNo)
     WHEN RowNum > '2' THE SUM(COUNT) Over(Order By ProdNo)
     End As LineNo
     From INVOICE Order By ProdNo

有什么想法吗

Scripts to create the table and insert data:

   CREATE TABLE [dbo].[Orders](
       [OrderNo] [int] NULL,
       [ProdNo] [int] NULL
       ) ON [PRIMARY]
       GO

    Insert Into Orders (OrderNo, ProdNo)
 
   Values ('001', '50822'), ('001', '50822'), ('001', '50899'), ('001', '50899'), ('001', '50899'),
       ('001', '53066'), ('001', '60936'), ('001', '60936'), ('001', '60936'), ('001', '60936'),
       ('001', '60936'), ('001', '60936'), ('001', '60936')


如有任何建议,将不胜感激。提前谢谢你。

这是一种很不雅观的做法,但很管用

SELECT z.*
    , ln = sum(prvCount) over(order by sort) + 1
     FROM 
(
SELECT 
    o.*
    , prvCount = LAG(Count,1,0) OVER(ORDER BY sort)
    FROM 
    (SELECT DISTINCT
        o.ProdNo
        , DENSE_RANK() OVER(ORDER BY ProdNo) as sort
        , [Count] =  COUNT(*) OVER(PARTITION BY ProdNo)
    FROM Orders o 
    WHERE OrderNo = @OrderNo
    ) o
     )     z

不管优雅与否,这都是一件好事!非常感谢。我真的很感激,没问题。请你把答案标为已接受好吗。