【问题标题】:how to updated values that are same in other columns?如何更新其他列中相同的值?
【发布时间】:2017-04-26 08:51:22
【问题描述】:

这背后的逻辑是如果同一位置的 Ser_request 编号相同,则考虑 Max“Power before downtime”的行。需要更新的行是列名ID最小值

我需要创建三个新列 Adj Start date、Adj end date、Adj DC power 并插入相应列中的数据

  • downtime_start =调整开始日期

    -downtime_end = 调整结束日期

    -power_before_downtime = 调整直流电源

我尝试这样做,但通过对相同的值进行分组,我无法找到第一行。

我使用的是 sql server 2012

这是我迄今为止尝试过的:

select location,downtime_start  , count(*)
from dbo.TB1
group by location,downtime_start  , count(*)
having count(*)>1

在此查询之后,我得到了 TB1 的结果,但我不知道如何对它们进行分组并将值插入到相应的列中。

感谢任何帮助

谢谢

ID | location | downtime_start      | downtime_end         | power_before_downtime | power_after_downtime | creation_time       | end_time            | ser_request
1  | xyz.a    | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16                 | 13.67                | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003 
2  | xyz.a    | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16                 | 13.67                | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003
3  | xyz.a    | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16                 | 13.67                | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003 

输出表应该是这样的:

ID | location | downtime_start        | downtime_end           | power_before_downtime|   power_after_downtime| creation_time        | end_time 
      |ser_request |  Adj Start date        |   Adj end date           |  Adj DC power

1  | xyz.a    | 3/8/2017 2:00:00 PM   | 3/10/2017 8:00:00 AM   | 14.16                |   13.67              |3/8/2017 3:25:37 PM    |  3/8/2017 6:41:59 PM| 0003       | 3/8/2017 2:00:00 PM    |  3/10/2017 8:00:00 AM    |     14.16

2  |  xyz.a   |  3/8/2017 2:00:00 PM  |   3/10/2017 8:00:00 AM |    14.16 

| 13.67 | 2017 年 3 月 8 日下午 3:25:37 |2017 年 3 月 8 日下午 6:41:59 | 0003
| 0 | 0 | 0

3  |  xyz.a   |    3/8/2017 2:00:00 PM|   3/10/2017 8:00:00 AM |   14.16 

| 13.67 2017 年 3 月 8 日下午 3:25:37 | 2017 年 3 月 8 日下午 6:41:59| 0003| 0 | 0 | 0

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server? (不要标记未涉及的产品。)
  • 我看不懂那些图片的小文字。 (这里的大多数人想要格式化的文本,而不是图像......)
  • 我正在使用 MS SQL 2010
  • edit您的问题包括样本数据。它在 cmets 中是不可读的。 (理想情况下,最好使用带有 CREATE TABLEINSERT 语句的代码块。
  • @Damien_The_Unbeliever:我已经在问题中添加了数据

标签: sql sql-server


【解决方案1】:
UPDATE T
SET 
[Adj Start date] = downtime_start,
[Adj end date]   = downtime_end,
[Adj DC power]   = power_before_downtime
FROM (
    SELECT [Adj Start date], [Adj end date], [Adj DC power], downtime_start, downtime_end, power_before_downtime, 
        rn = ROW_NUMBER() OVER (PARTITION BY downtime_start, downtime_end ORDER BY id) 
    FROM dbo.TB1
) T
WHERE rn = 1

如果需要选择数据,请使用CASE WHEN rn = 1 THEN downtime_start ELSE 0 END

【讨论】:

  • 我收到一个错误,因为所有三列的列名都无效
  • @Looking_for_answers 我已经编辑了我的查询并添加了五个缺失的列。如果出现错误,请提供完整的错误消息
猜你喜欢
  • 2014-07-11
  • 1970-01-01
  • 2020-02-19
  • 2020-10-24
  • 2012-09-02
  • 2023-03-11
  • 2012-04-20
  • 2019-01-20
  • 2021-10-19
相关资源
最近更新 更多