将行与特定值组合并连接

时间:2017-07-28 23:25:24

标签: sql concatenation

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

我要做的是将其连接成"{user} updated {old city} to {new city}"之类的东西。我想把它放在一个名为Description的新列中,该行包含" new value"旗帜,但不想触摸没有旧价值的行#34;或者"新价值"因为有许多不同的标志用于他们可能正在进行的更改类型。我真的不确定如何组合这样的行。

标记为"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  

1 个答案:

答案 0 :(得分:0)

首先要提出几个问题。

  • 什么是数据库?版本#?
  • 此外," 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)