【问题标题】:Highlight missing follow up payment SQL Server突出显示缺少的后续付款 SQL Server
【发布时间】:2021-11-25 15:12:51
【问题描述】:

我正在尝试找到一种方法来创建一个查询,以突出显示预期交易是否遵循 SQL Server 2016 中的付款。

我掌握的数据大概是

SELECT 123456 AS Casekey
        , 1 as rnk
        , NULL AS LAPayment
        , 1080.00 AS LAReserve
UNION ALL
SELECT 123456 AS Casekey
        , 2 as rnk
        , 1080.00 AS LAPayment
        , null AS LAReserve
UNION ALL
SELECT 123456 AS Casekey
        , 3 as rnk
        , NULL AS LAPayment
        , NULL AS LAReserve

在 LAPayment 之后应该有一个 0 的后续 LAReserve,但是没有 - 我需要在发生这种情况时强调 - 基本上付款将储备金减少到 0,但系统配置的方式将 0 输入到交易屏幕和数据必须反映系统 - 遗憾的是,这超出了我的控制范围!

【问题讨论】:

  • 你能添加预期的输出来解决问题吗?

标签: sql tsql sql-server-2016


【解决方案1】:

您可以为此使用LEAD 窗口函数

SELECT *
FROM (
    SELECT *,
      NextLAReserve = LEAD(LAReserve) OVER (PARTITION BY Casekey ORDER BY rnk)
    FROM YourTable t
) t
WHERE t.LAPayment > 0 AND t.NextLAReserve IS NULL;

【讨论】:

    【解决方案2】:

    Windows 函数在这方面很有用。在此问题中,您可能需要 LAG() 或 LEAD()。 @Charlieface 的上述答案给出了 LEAD(),这给出了 LAG()

    LAG() 窗口函数可以在这种情况下使用。最好给出预期的输出,以便在发布之前测试结果。

    SELECT Casekey
     , rnk
     , LAPayment
     , CASE WHEN LAG(LAPayment) over (order by Casekey)   is not null then  0 ELSE LAReserve END  AS LAReserve  
      FROM
      (SELECT 123456 AS Casekey
         , 1 as rnk
         , NULL AS LAPayment
         , 1080.00 AS LAReserve
        UNION ALL
       SELECT 123456 AS Casekey
          , 2 as rnk
          , 1080.00 AS LAPayment
          , null AS LAReserve
        UNION ALL
       SELECT 123456 AS Casekey
          , 3 as rnk
          , NULL AS LAPayment
          , NULL AS LAReserve
        ) AS A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多