【问题标题】:How to select same column with multiple alias name from same table?如何从同一个表中选择具有多个别名的同一列?
【发布时间】:2018-07-09 10:43:01
【问题描述】:

我需要使用以下组合从表中选择值

SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '11AX';
SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '34XA';
SELECT Details FROM  Avenger   WHERE Id = '1' and KEY = '11AZ';
SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '11ZA';

在单个查询中我知道我可以使用

SELECT * FROM Avenger WHERE ID='1';

但我需要使用所有选定的值并将其分配给单个查询中的四个变量

我可以使用任何想法或解决方案吗?

Id  Key Details
1   11AX    Mark 
1   34XA    Bruce 
1   11AZ    Mr. Green
1   11ZA    Hulk
2   11AX    Robert jr.
2   34XA    Toney 
2   11AZ    Iron Man
2   11ZA    Arrogant
3   11AX    Thor
3   34XA    Asgard
3   11AZ    God
3   11ZA    Hamer

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • 期望的结果是前四个选择语句,我需要在单个查询中合并所有这些
  • “四变量”指的是什么?
  • 我将在 java 中用于显示数据的这四个变量

标签: sql oracle11g


【解决方案1】:

认为我知道你想要这个:

select 
    (SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '11AX') as var1,
    (SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '34XA') as var2,
    (SELECT Details FROM  Avenger   WHERE Id = '1' and KEY = '11AZ') as var3,
    (SELECT Details FROM  Avenger   WHERE Id = '1' AND KEY LIKE '11ZA') as var4
    from dual

还有一个pivot 选项

【讨论】:

    【解决方案2】:

    我们可以在这里尝试使用REGEXP_LIKE 交替使用:

    SELECT *
    FROM yourTable
    WHERE Id = '1' AND REGEXP_LIKE("KEY", '11AX|34XA|11AZ|11ZA')
    

    实际上,我不确定您是否打算在原始查询中使用 LIKE。你可能真的只想这样做:

    SELECT *
    FROM yourTable
    WHERE Id = '1' "KEY" IN ('11AX', '34XA', '11AZ', '11ZA')
    

    【讨论】:

    • 我不能同时接受这两个,但这也是一个很好的答案,所以投票:)
    【解决方案3】:

    我想你想要一个case 表达式:

    select details,
           (case when key like '11AX' then 1
                 when key like '34XA' then 2
                 when key like '11AZ' then 3
                 when key like '11ZA' then 4
            end) as flag
    from avenger a
    where id = 1;
    

    如果您只想使用单个表达式选择值,请以 in 开头:

    where id = 1 and key in ('11AX', '34XA', '11AZ', '11ZA')
    

    如果您想将值作为单个字符串传递,那么 regexp_like() 有效:

    where id = 1 and regexp_like(key, '^11AX|34XA|11AZ|11ZA$')
    

    两个音符:

    • 模式已锚定,因此仅匹配完整的key
    • regexp_like() 通常不使用索引,因此为了提高性能,=in 是更好的选择。

    也许你打算:

    select max(case when key like '11AX' then details end) as deails_11ax,
           max(case when key like '34XA' then details end) as details_34XA,
           max(case when key like '11AZ' then details end) as details_11AZ,
           max(case when key like '11ZA' then details end) as details_11AZ
    from avenger a
    where id = 1;
    

    这将返回一行四列。

    【讨论】:

    • 谢谢,这项工作可以帮助更多一点,将此变量作为别名分配给任何四个
    • @v8-E 。 . .如果第一个版本没有做你想做的事,我不明白评论。您应该编辑问题并显示所需的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多