【问题标题】:Look up in same table with different value reference sql server [closed]在具有不同值引用sql server的同一张表中查找[关闭]
【发布时间】:2019-10-29 10:15:31
【问题描述】:

我需要一些关于代码的帮助。我有 Btime 有时为 0 的 TableA。

  TableA

       ID    Dest   Orig    Bcode   Btime
       FB8E  GD     TR      KL      3600
       AC2A  BO     VR      KS      2700
       65B3  GD     AE      LH      7800
       AF85  NY     BU      NWG     3300
       B32A  BO     VR      KS      0
       B42L  NY     BU      NWG     0
       F66D  BO     VR      KS      2700
       N20S  NY     BU      NWG     3300

我需要从同一张表中获取 Btime 的值,其中 Dest、Orig 和 Bcode 与 Btime 为 0 的行中的值相同,并将 Btime 转换为 HH:MM:SS

结果是:

      ID    Dest    Orig    Bcode   Btime
      FB8E  GD      TR      KL      01:00:00
      AC2A  BO      VR      KS      00:45:00
      65B3  GD      AE      LH      02:10:00
      AF85  NY      BU      NWG     00:55:00
      B32A  BO      VR      KS      00:45:00
      B42L  NY      BU      NWG     00:55:00

如果有多个值可以满足此条件,我如何为整个表获取此值?

版本是 Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)

【问题讨论】:

  • 如果有多个符合此条件的 Btime 记录怎么办?
  • 没有SQL Server 15.0.18142;最新版本的 SQL Server 15(SQL Server 2019 预览版)是 15.0.1900.25。告诉我们您的 SQL Server 版本,而不是您的 SSMS 构建版本。
  • 是的,这是真的,有多个符合此条件的 Btime 记录。

标签: sql sql-server lookup


【解决方案1】:

您可以将值转换为time 的格式并使用窗口函数来填充值:

select t.*,
       dateadd(second, new_btime, convert(time, 0)) as new_btime_formatted
from (select t.*,
             (case when btime = 0
                   then max(btime) over (partition by dest, orig, bcode)
                   else btime
              end) as new_btime
      from t
     ) t;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2022-07-06
    • 2013-12-01
    • 2017-04-23
    • 2013-03-15
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多