如何创建包含多个列的选择查询,查询具有多个条件的单个列

时间:2017-06-09 13:44:53

标签: sql db2 where

我想从我的db2数据库中获取一个结果列表,查询在同一列上具有多个条件的表。以下是一个示例场景:

表1:

col1, col2, col3, col4, col5

sample, user, adam, ggg, hdh
sample, source, online, urt, loe
random, user, henr, uuu, kkk
crew, user, mike, nhg, kik
crew, dummy, nothing, irr, wer
ment, maker, hts, ret, opp

我正在尝试编写一个选择查询,它将按以下方式列出详细信息:

col1, col2, col3, col4
sample, adam, online, ggg
random, henr, , uuu
crew, mike, nothing, irr
ment,  ,  , ret

因此,当col2的值为 user 时,我想将相应的col3值作为select语句的列之一。并且,当col2在 source或dummy 中具有值时,我希望相应的col3值作为我的select语句的另一列。通过这种方式,我最终可以得到一个包含4列的列表,这些列表可以获得我需要的独特细节组合。

我有一个这样的草稿查询。我不知道如何重构这个以获得查询单个列的两个输出列。

select col1 , col3 as col2, col3 as col3, col4 from Table1 
where col2='user' or col2 in ('source','dummy')

如果我这样做,我就会以这种方式获得输出

col1, col2, col3, col4
sample, adam, adam, ggg
sample, online, online, ggg
random, henr, henr, uuu
crew, mike, mike, irr
crew, nothing, nothing, irr

3 个答案:

答案 0 :(得分:2)

我想你想要这个:

select col1,
       max(case when col2 = 'user' then col3 end) as col2,
       max(case when col2 in ('source', 'dummy') then col3 end) as col3,
       max(col4) as col4
from t
group by col1;

答案 1 :(得分:1)

我不确定为什么你在输入中提到了col5,因为你的输出中没有提到它?它只是弄脏了水; - )

无论如何,根据输入/输出示例,这里是您需要获得结果的SQL:

WITH
  USER AS
    ( SELECT COL1
           , COL3 AS COLA
           , COL4 AS COLB
        FROM TABLE1
        WHERE COL2 = 'USER'
    )

, SOURCE AS
    ( SELECT COL1
           , COL2 AS COLC
           , COL3 AS COLD
           , COL4 AS COLE
        FROM TABLE1
        WHERE COL2 IN ( 'SOURCE'
                      , 'DUMMY'
                      )
    )

SELECT U.COL1
     , U.COLA                       AS COL2
     , COALESCE(S.COLD,'')          AS COL3
     , COALESCE
         ( CASE
             WHEN S.COLC = 'DUMMY'
               THEN S.COLE
               ELSE U.COLB
           END
         , U.COLB
         )                          AS COL4
  FROM USER                  U
  LEFT OUTER JOIN SOURCE     S
    ON S.COL1 = U.COL1
  WITH UR FOR FETCH ONLY;

答案 2 :(得分:0)

您可能需要编写select col1 , col3 as col2, col2 as col3, col4 from Table1...然后添加相应的条件,就像您的情况一样。输出中的第二列和第三列是相同的,因为您在两个

中都选择了col3