SQL在针对多个列进行测试后分配值

时间:2013-03-12 12:56:44

标签: sql oracle

我有两列:

INPUT

col1 col2
1    0
1    0
1    0
2    1
2    0
3    0
3    0
3    1
3    1

我们假设col1保存了一些实体ID号,这是重复的。我正在测试此实体ID是否在col2中包含值1。因此,如果实体ID在相应的col2中有1,那么我创建另一个col3,其中“NO”/“YES”值或者只是“0”/“1”。

输出

col1 col3
1    NO
2    YES
3    YES

4 个答案:

答案 0 :(得分:3)

SELECT Col1, MAX(CASE WHEN col2 = 1 THEN 1 ELSE 0 END) Col3
FROM YourTable
GROUP BY Col1

<强>已更新 好吧,既然上面的查询不适合您,您可以尝试以下方法:

SELECT Col1, MAX(Col3) Col3
FROM (  SELECT  Col1, 
                CASE WHEN col2 = 1 THEN 1 ELSE 0 END AS Col3
        FROM YourTable) A
GROUP BY Col1

答案 1 :(得分:2)

UPDATE table 
SET 
    col3 = DECODE(col2, 1, 'YES', 'NO');

如果您只想为给定的实体ID运行它:

UPDATE table 
SET 
    col3 = DECODE(col2, 1, 'YES', 'NO')
WHERE
    col1 = yourid;

如果您的第3列不存在,则无论如何都必须先创建

ALTER TABLE table ADD (col3 NUMBER NOT NULL);

答案 2 :(得分:1)

SELECT  Col1,
        CASE WHEN MAX(Col2) = 1 THEN 'YES' ELSE 'NO' END AS Col3
FROM    TableName
GROUP   BY Col1

答案 3 :(得分:1)

SELECT DISTINCT col1, 
CASE WHEN EXISTS(SELECT * FROM MyTab WHERE col1 = M.col1 AND col2 = 1) 
THEN 'Yes' ELSE 'No' AS col3 FROM MyTab M