Db2 在替换另一列时获取一列具有不同值的记录';多条记录时的s值
我有两个表需要基于distinct rid进行连接,同时将列值替换为多行中的不同值。最好用下面的例子来解释Db2 在替换另一列时获取一列具有不同值的记录';多条记录时的s值,db2,Db2,我有两个表需要基于distinct rid进行连接,同时将列值替换为多行中的不同值。最好用下面的例子来解释 CREATE TABLE usr (rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(12) NOT NULL, email VARCHAR(20) NOT NULL); CREATE TABLE usr_loc (rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, code CHAR
CREATE TABLE usr (rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(12) NOT NULL,
email VARCHAR(20) NOT NULL);
CREATE TABLE usr_loc
(rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
code CHAR NOT NULL PRIMARY KEY,
loc_id INT NOT NULL PRIMARY KEY);
INSERT INTO usr VALUES
(1,'John','john@product'),
(2,'Linda','linda@product'),
(3,'Greg','greg@product'),
(4,'Kate','kate@product'),
(5,'Johny','johny@product'),
(6,'Mary','mary@test');
INSERT INTO usr_loc VALUES
(1,'A',4532),
(1,'I',4538),
(1,'I',4545),
(2,'I',3123),
(3,'A',4512),
(3,'A',4527),
(4,'I',4567),
(4,'A',4565),
(5,'I',4512),
(6,'I',4567);
(6,'I',4569);
所需结果集
+-----+-------+------+-----------------+
| rid | name | Code | email |
+-----+-------+------+-----------------+
| 1 | John | B | 'john@product' |
| 2 | Linda | I | 'linda@product' |
| 3 | Greg | A | 'greg@product' |
| 4 | Kate | B | 'kate@product' |
| 5 | Johny | I | 'johny@product' |
| 6 | Mary | I | 'mary@test' |
+-----+-------+------+-----------------+
我尝试了一些查询以加入,一些查询以计数,但一个完全满足整个场景的查询失败了
我提出的问题是
SELECT distinct(a.rid)as rid, a.name, a.email, 'B' as code
FROM usr
JOIN usr_loc b ON a.rid=b.rid
WHERE a.rid IN (SELECT rid FROM usr_loc GROUP BY rid HAVING COUNT(*) > 1);`
您需要按用户分组,并计算在
usr\u loc
中出现的次数。如果不止一个,则用B
替换code
。见下文:
select
rid,
name,
case when cnt > 1 then 'B' else min_code end as code,
email
from (
select u.rid, u.name, u.email, min(l.code) as min_code, count(*) as cnt
from usr u
join usr_loc l on l.rid = u.rid
group by u.rid, u.name, u.email
) x;
在我看来,您使用的是MySQL,而不是IBMDB2。是吗?
DISTINCT
不是一个函数,它不适用于单个列。它适用于整个SELECT
列表。您使用的是MySQL、SQL Server还是DB2?不能将表名放在别名中作为b.code
应该是作为code
。示例结果集似乎格式不正确,或者至少与示例数据不匹配。rid
不能是usr\u loc
中的主键,因为存在重复项。