【问题标题】:SQL server query -- multiple row value check for the same request numberSQL server 查询——多行值检查同一个请求号
【发布时间】:2022-11-12 18:08:34
【问题描述】:

请帮助我解决以下情况。 我是 SQL Server 管理新手

桌子

Request Obj
123 483
123 456
456 456

我在服务器上有一张这样的桌子

我需要得到如下结果

Request result
123 new
123 new
456 WIP

逻辑是 如果请求同时具有 483 和 456 对象,那么这将是“新的” 如果请求只有 456 而没有 483 那么它将是 WIP

有人可以帮我获取这些要求的代码吗

感谢您的时间和帮助

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    窗口函数row_number() over() 可能很适合这里

    Select * 
          ,Result =case when row_number() over (partition by [Obj] order by [Request] ) = 1
                        then 'new'
                        else 'WIP'
                    end
    From YourTable
    Order By Request
    

    结果

    Request Obj Result
    123     456 new
    123     483 new
    456     456 WIP
    

    【讨论】:

      【解决方案2】:

      假设您可能有超过两行的请求值,您可以对“Obj”的不同值使用条件计数来检查请求是否具有两个值(483、456),然后将其加入您的表以获得所需的输出。

      SELECT T.Request,
                 CASE 
                   WHEN D.cn = 2
                   THEN 'New'
                   ELSE 'WIP'
                 END AS result
      FROM table_name T
      JOIN
      (
        SELECT Request, COUNT(DISTINCT CASE WHEN Obj IN (483, 456) THEN Obj END) AS cn
        FROM table_name
        GROUP BY Request
      ) D
      ON T.Request = D.Request
      ORDER BY T.Request
      

      请参阅demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        • 2020-06-07
        • 2014-01-15
        相关资源
        最近更新 更多