SQL 合并列中的行值
SQL merge row values in a column
TABLE 1
CODE
VALUE
AA
21
AA
32
AB
24
AC
22
AA
42
AC
20
AD
27
AD
28
AE
29
AF
31
AG
45
AE
51
AH
33
TABLE 2
CODE
KEY
AA
1
AB
2
AC
3
AD
4
AE
5
AF
6
AG
7
AH
8
这里我想以这样一种方式转换 table,即 AB 值与 AA 相加而不影响其密钥,类似地,AG 的值必须与 AD 相加而不更改其密钥,如下所示。 Table 1 一个代码可以有多个值。请帮忙或告诉我方法。
CODE
VALUE
KEY
AA
119
1
AC
22
3
AD
100
4
AE
29
5
AF
31
6
AH
33
8
在TABLE1
中使用CASE
表达式合并您想要的代码并聚合并加入TABLE2
:
SELECT t1.code, t1.value, t2.key
FROM (
SELECT CASE code
WHEN 'AB' THEN 'AA'
WHEN 'AG' THEN 'AD'
ELSE code
END code,
SUM(value) "value"
FROM table1
GROUP BY 1
) t1 INNER JOIN table2 t2
ON t2.code = t1.code
ORDER BY t1.code;
参见demo。
TABLE 1
CODE | VALUE |
---|---|
AA | 21 |
AA | 32 |
AB | 24 |
AC | 22 |
AA | 42 |
AC | 20 |
AD | 27 |
AD | 28 |
AE | 29 |
AF | 31 |
AG | 45 |
AE | 51 |
AH | 33 |
TABLE 2
CODE | KEY |
---|---|
AA | 1 |
AB | 2 |
AC | 3 |
AD | 4 |
AE | 5 |
AF | 6 |
AG | 7 |
AH | 8 |
这里我想以这样一种方式转换 table,即 AB 值与 AA 相加而不影响其密钥,类似地,AG 的值必须与 AD 相加而不更改其密钥,如下所示。 Table 1 一个代码可以有多个值。请帮忙或告诉我方法。
CODE | VALUE | KEY |
---|---|---|
AA | 119 | 1 |
AC | 22 | 3 |
AD | 100 | 4 |
AE | 29 | 5 |
AF | 31 | 6 |
AH | 33 | 8 |
在TABLE1
中使用CASE
表达式合并您想要的代码并聚合并加入TABLE2
:
SELECT t1.code, t1.value, t2.key
FROM (
SELECT CASE code
WHEN 'AB' THEN 'AA'
WHEN 'AG' THEN 'AD'
ELSE code
END code,
SUM(value) "value"
FROM table1
GROUP BY 1
) t1 INNER JOIN table2 t2
ON t2.code = t1.code
ORDER BY t1.code;
参见demo。