Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将值设置为查询中的其他列_Sql_Oracle - Fatal编程技术网

Sql 将值设置为查询中的其他列

Sql 将值设置为查询中的其他列,sql,oracle,Sql,Oracle,大家好,我的社区 我希望实现以下目标 当前查询表 m_id s_s s_e a_s_t comm cosk 101 2019-12-23 13:08:49 2019-12-23 13:13:12 NS dt2 p2 101 2019-12-23 13:13:12 2019-12-23 13:14:35 UP dt2 p2 101 201

大家好,我的社区

我希望实现以下目标

当前查询表

 m_id s_s                    s_e                 a_s_t      comm  cosk
    101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS        dt2   p2
    101  2019-12-23 13:13:12  2019-12-23 13:14:35   UP        dt2   p2
    101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS        dt4   p4
 m_id s_s                    s_e                 a_s_t      comm  cosk
    101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS        dt2   p2
    101  2019-12-23 13:13:12  2019-12-23 13:14:35   UP        UP    UP
    101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS        dt4   P4
所需查询表

 m_id s_s                    s_e                 a_s_t      comm  cosk
    101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS        dt2   p2
    101  2019-12-23 13:13:12  2019-12-23 13:14:35   UP        dt2   p2
    101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS        dt4   p4
 m_id s_s                    s_e                 a_s_t      comm  cosk
    101  2019-12-23 13:08:49  2019-12-23 13:13:12   NS        dt2   p2
    101  2019-12-23 13:13:12  2019-12-23 13:14:35   UP        UP    UP
    101  2019-12-23 13:14:35  2019-12-23 13:14:56   MS        dt4   P4
我编写了一个查询来获取第一个表(当前查询的表)。我想要的是以下内容


将comm,cosk设置为up,其中一个是up

您可以通过一个简单的CASE语句来实现

CASE WHEN A_S_T = 'UP' THEN 'UP' ELSE COMM END AS COMM,
CASE WHEN A_S_T = 'UP' THEN 'UP' ELSE COSK END AS COSK

如果要更新表本身中的值,请使用update query

UPDATE tableName
SET [comm] = 'UP' ,  [cosk] = 'UP'
WHERE a_s_t = 'UP' 
如果只想选择这些值而不更改表,请使用以下查询:

SELECT   [m_id], [s_s],[s_e],[a_s_t],
        CASE WHEN [a_s_t] = 'UP' THEN 'UP', ELSE [comm] END AS [comm],
        CASE WHEN [a_s_t] = 'UP' THEN 'UP', ELSE [cosk]END AS [cosk] 
FROM tableName

您可以使用
case。。当
解码时,如下所示:

-- using case when

SELECT m_id, s_s,s_e,a_s_t,
        CASE WHEN upper(a_s_t) = 'UP' THEN a_s_t ELSE comm END AS comm,
        CASE WHEN upper(a_s_t) = 'UP' THEN a_s_t ELSE cosk END AS cosk 
FROM (your_query);

-- or using decode

SELECT m_id, s_s,s_e,a_s_t,
       Decode(upper(a_s_t),'UP',a_s_t,comm) AS comm,
       Decode(upper(a_s_t),'UP',a_s_t,cosk) AS cosk 
    FROM (your_query);

干杯

这是一个简单的更新查询。你试过什么了吗?comm和cosk是从另一个类似这样的查询中派生出来的:tbl1.comm,tbl2中的tbl1.cosk我选择值在查询时,给出与前一个查询相同的结果(如果您可以将整个查询与其他表的联接共享,则comm或coskIt中没有up值是好的。这将有助于我们理解大小写不起作用的原因。comm和cosk是从另一个类似的查询中派生出来的:tbl1.comm,tbl2中的tbl1.cosk i选择值大小写在查询时,给出与前一个查询相同的结果(comm或coskThanks中没有up值供您评论,但解码不起作用。查询时的情况与上一次查询的结果相同(comm或cosk中没有up值当您的up不是up而是up时,表示大小写必须不同。请立即查看更新的答案。感谢更新。但当comm和cosk不在上面时,结果仍然相同。当comm和cosk不在上面时,它显然不会更改comm和cosk不在上面的记录。那么您的期望是什么?