繁体   English   中英

根据另一列中的不同值设置列值

[英]set column value based on distinct values in another column

我试图做一些非常类似于这个问题的东西: mysql - 基于其他行更新行

我有一个名为modset的表,格式如下:

member    year    y1    y2    y3    y1y2    y2y3    y1y3    y1y2y3 
a         1       0     0     0     0       0       0       0
a         2       0     0     0     0       0       0       0
a         3       0     0     0     0       0       0       0
b         1       0     0     0     0       0       0       0
b         2       0     0     0     0       0       0       0
c         1       0     0     0     0       0       0       0
c         3       0     0     0     0       0       0       0
d         2       0     0     0     0       0       0       0

第3:9列是二进制标志,用于指示成员记录的年份组合。因此,我希望SQL更新的结果如下所示:

member    year    y1    y2    y3    y1y2    y2y3    y1y3    y1y2y3 
a         1       0     0     0     0       0       0       1
a         2       0     0     0     0       0       0       1
a         3       0     0     0     0       0       0       1
b         1       0     0     0     1       0       0       0
b         2       0     0     0     1       0       0       0
c         1       0     0     0     0       0       1       0
c         3       0     0     0     0       0       1       0
d         2       0     1     0     0       0       0       0

上面链接的问题中的代码确实非常接近,但只有当它是成员记录的不同年份的计数时。 我需要将列基于成员记录的年份的特定值。

提前致谢!

SELECT member,
    case when min(distinct(year)) = 1 and max(distinct(year)) = 1 then 1 else 0 end y1,
    case when min(distinct(year)) = 1 and max(distinct(year)) = 2 then 1 else 0 end y1y2,
    case when min(distinct(year)) = 1 and max(distinct(year)) = 3 and count(distinct(year)) = 2 then 1 else 0 end y1y3,
    case when min(distinct(year)) = 1 and max(distinct(year)) = 3 and count(distinct(year)) = 3 then 1 else 0 end y1y2y3,
    case when min(distinct(year)) = 2 and max(distinct(year)) = 2 then 1 else 0 end y2,
    case when min(distinct(year)) = 2 and max(distinct(year)) = 3 then 1 else 0 end y2y3,
    case when min(distinct(year)) = 3 then 1 else 0 end y3
INTO temp5
FROM modset
GROUP BY member;

UPDATE modset M
SET y1 = T.y1, y2 = T.y1, y3 = T.y3, y1y2 = T.y1y2, y1y3 = T.y1y3, y2y3 = T.y2y3, y1y2y3 = T.y1y2y3
FROM temp5 T
WHERE T.member = M.member;

您使用什么查询来返回成员记录的年份指标?

听起来您想要获取查询结果并在更新中使用它:

http://dev.mysql.com/doc/refman/5.0/en/update.html

它可能看起来像这样:

UPDATE targetTable t, sourceTable s 
SET t.y1 = s.y1, t.y2 = s.y2 -- (and so on...)
WHERE t.member = s.member AND t.year = m.year;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM