oraclesql:在case语句中使用相同的别名,在一个case语句中选择一列,在另外两列中选择另三个具有相同别名的列

yqkkidmi  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(375)

我在甲骨文的一个精选案例中犯了一些错误,我将感谢stackoverflow社区的帮助。
我试图做的是基于一个条件(列的值)来返回一个或多个列。
我总是需要我的查询返回三列:文章、段落、子段落
如果我正在检查的列列表的值是article,那么我只需要将article和null返回给段落和子段落。如果一列的值是paragraph,我需要同时返回paragraph和article,sub\ u paragraph应该为null。如果列的值是sub\u paragraph,我需要返回article、paragraph和sub\u paragraph的所有值。

SELECT

     CASE
         WHEN att.list_value = 'Sub_Paragraph' THEN att.column_with_subpar_value
     END AS sub_paragraph,
     CASE
         WHEN att.list_value = 'Sub_Paragraph' THEN att.column_with_par_value
     END AS paragraph,
     CASE
         WHEN att.list_value = 'Sub_Paragraph' THEN att.column_with_article_value
     END AS article,

     CASE
         WHEN att.list_value = 'Paragraph' THEN att.column_with_par_value
     END AS paragraph,
     CASE
         WHEN att.list_value = 'Paragraph' THEN att.column_with_article_value
     END AS article,

     CASE
         WHEN att.list_value = 'Article' THEN att.column_with_article_value
     END AS article

 FROM
     att

 WHERE
     id = 1

但通过这种方法,我得到了像第1篇、第2篇之类的专栏文章。成功的最佳方法是什么?

tkqqtvp1

tkqqtvp11#

看看你的要求,下面的希望就是你所期待的。

SELECT CASE
         WHEN att.list_value = 'Sub_Paragraph' THEN
          att.column_with_subpar_value
       END AS sub_paragraph,
       CASE
         WHEN att.list_value in ('Sub_Paragraph', 'Paragraph') THEN
          att.column_with_par_value
       END AS paragraph,
       CASE
         WHEN att.list_value in ('Sub_Paragraph', 'Paragraph', 'Article') THEN
          att.column_with_article_value
       END AS article
  FROM att
 WHERE id = 1;
bvhaajcl

bvhaajcl2#

解决此问题的方法之一是使用一个已知的分隔符将所有列连接到一个列中,以后可以将分隔符拆分为所需的列集。

相关问题