【问题标题】:Combine and concatenate rows with certain values组合并连接具有特定值的行
【发布时间】:2018-01-05 03:00:57
【问题描述】:

我正在尝试在数据库中组合值,以便那些不是软件开发人员但想不出解决方案的人更容易。下面是数据库的外观示例。当技术人员更改公司的现有值(例如城市名称)时,它会创建 3 个如下所示的条目。

我想要做的是将它连接成类似"{user} updated {old city} to {new city}" 的东西。我想将它放在一个名为“新值”标志的行的新列中,但不想触及没有“旧值”或“新值”的行,因为有许多不同的标志用于他们可能进行的更改类型。我不确定如何组合这样的行。

标记为"num" 的部分特定于所做的每项更改,并且只有像示例中的组这样的组将具有相同的值,所以我想也许我可以以某种方式使用 group by 来清除任何更改只需要一行,因为我只寻找具有如下格式的块。

_ id_|_CompName   |_val_flag | value _|num|user|______updated______  
1224 |Test company|old_value |Old City|594|user|2017-07-28 15:42:58.117  
1225 |Test company|new_value |New City|594|user|2017-07-28 15:42:58.117  
1226 |Test company|rec_value |New City|594|user|2017-07-28 15:42:58.117  

【问题讨论】:

  • 什么是数据库?版本 #?另外,“REC_VALUE”记录的意义是什么?我们应该考虑一下吗?看起来像“GROUP BY” USER 是一个开始的地方。是“CITY”列名吗?那么,NEW CITY 和 OLD CITY 有内在联系吗?如果是这样,需要根据USER和VALUE(后半部分,减去NEW/OLD)编写GROUP BY。

标签: sql concatenation


【解决方案1】:

从几个问题开始。

  • 什么是数据库?版本 #?
  • 另外,“REC_VALUE”记录的意义是什么?我们应该考虑一下吗?

看起来“GROUP BY”USER 是从哪里开始。根据 USER 和 NUM 编写 GROUP BY。

如下所示。 Oracle SQL 语法(未经测试)。

SELECT USER ||' updated ' || OLD_VAL || ' to ' || NEW_VAL AS DESCRIPTION
FROM (
SELECT AUD.USER
, MAX(CASE WHEN _VAL_FLAG = 'old_value' THEN VALUE END) OLD_VAL
, MAX(CASE WHEN _VAL_FLAG = 'new_value' THEN VALUE END) NEW_VAL
FROM AUDIT_TABLE AUD
GROUP BY AUD.USER, NUM)

【讨论】:

  • 谢谢我刚刚看到你现在回答了,因为我没有收到电子邮件通知,但这有效!周末我一直在思考想法,并且正在考虑使用案例。此外,rec 值并不是很重要,它只是每次进行更改以保存更改时数据库使用的第三个值。此查询适用于存储我们所有公司客户信息的数据库。
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
相关资源
最近更新 更多