根据条件创建列 - sql

Posted

技术标签:

【中文标题】根据条件创建列 - sql【英文标题】:column creation on condition - sql 【发布时间】:2020-08-11 16:46:30 【问题描述】:

表:

col1         col2         col3
236          1234         lion
236          1234 
235          1023        
235          1234         
234          1234
232          1234
232          1234         tiger
231          1234
231          1234         cat

旨在创建一个 col4 并将值从 col3 复制到 col4 if(在 col2 上进行分区):

只要 col3 中存在 "cat",则检查 col1+5 是否存在,如果存在,则 "cat" 行中 col3 的值转到 col4(其 col1 值为 cat 的 "col1+5")

输出:

 col1         col2         col3     col4
 236          1234         lion      
 236          1234                  cat
 235          1023
 235          1234         
 234          1234
 232          1234
 232          1234         tiger
 231          1234
 231          1234         cat

【问题讨论】:

【参考方案1】:

如果我理解正确,你可以使用left join

select t.*,
       (case when t.col3 is null then t5.col3 end) as col4
from t left join
     t t5
     on t5.col1 = t.col1 + 5 and t5.col2 = t.col2 and t5.col3 = 'cat'

【讨论】:

【参考方案2】:

您的问题没有很好地描述,但看起来这就是您所需要的:

with t(col1,col2,col3) as (
    select  236 ,1234,'lion'  from dual union all
    select  236 ,1234,''      from dual union all
    select  235 ,1023,''      from dual union all
    select  235 ,1234,''      from dual union all
    select  234 ,1234,''      from dual union all
    select  232 ,1234,''      from dual union all
    select  232 ,1234,'tiger' from dual union all
    select  231 ,1234,''      from dual union all
    select  231 ,1234,'cat'   from dual
)
select 
    t.*
   ,case
        when col3 is null then
            max(col3)over(partition by col2 order by col1 range between 5 preceding and 5 preceding) 
    end col4
from t
order by col1 desc,col2 asc,col3
/

结果:

      COL1       COL2 COL3  COL4
---------- ---------- ----- -----
       236       1234 lion
       236       1234       cat
       235       1023
       235       1234
       234       1234
       232       1234 tiger
       232       1234
       231       1234 cat
       231       1234

9 rows selected.

【讨论】:

以上是关于根据条件创建列 - sql的主要内容,如果未能解决你的问题,请参考以下文章

根据 SQL Server 中给定的条件分配产品名称

如何根据 Oracle SQL 中的某些条件将列拆分为 2?

SQL - 根据条件填充列值

SQL根据条件将值从一列复制到另一列

T-SQL:在 UPDATE 语句中使用 CASE 根据条件更新某些列

在sql中使用case语句根据某些条件对列进行分组