简体   繁体   English

ORACLE SQL-如何在表中的COLUMN_NAME之间进行搜索并获取价值

[英]ORACLE SQL-How can i search between COLUMN_NAME in a Table and get value

I have a table with Calendarweeks . 我有一个带有Calendarweeks的桌子。 I want the values ​​of between 2 column_name . 我想要2个column_name之间的值。 I use 2 dropdown for column_name . 我使用2下拉列表column_name I have already tried (see below) but unfortunately not success. 我已经尝试过(见下文),但是不幸的是没有成功。 Could anyone help me, please? 有人可以帮我吗? Thank you 谢谢

SELECT LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) 
  FROM ALL_TAB_COLUMNS 
 WHERE TABLE_NAME = 'ALSI_TEST_DELETE' 
   AND COLUMN_NAME BETWEEN :dropdown1 AND :dropdown2

>>>Results:  01, 02, 03, 04 (But without Values, only COLUMN_NAME. I want Values and COLUMN_NAME)

在此处输入图片说明

Seems You want such a query as below : 似乎您需要这样的查询,如下所示:

select listagg(column_name,', ') within group (order by column_id)
    as "My Columns List" 
  from user_tab_columns
 where table_name = 'ALSI_TEST_DELETE'
   and column_id between ( select column_id 
                             from user_tab_columns 
                            where table_name = 'ALSI_TEST_DELETE' 
                              and column_name = 'COL1' )
                     and ( select column_id 
                             from user_tab_columns 
                            where table_name = 'ALSI_TEST_DELETE' 
                              and column_name = 'COL4' );

Demo 演示版

More elegant way to be considered : 更优雅的方式可以考虑:

with utc as
(
 select table_name as tab_name,
        max(case when column_name = 'COL1' then column_id end) as col1,
        max(case when column_name = 'COL4' then column_id end) as col2 
   from user_tab_columns 
  where table_name = 'ALSI_TEST_DELETE'
  group by table_name
)
select listagg(column_name,', ') within group (order by column_id)
    as "My Columns List" 
  from user_tab_columns
  cross join utc
 where table_name = utc.tab_name
   and column_id between utc.col1 and utc.col2;

I think you need UNPIVOT for your problem: 我认为您需要UNPIVOT解决您的问题:

WITH ALSI_TEST_DELETE AS (SELECT 7 "01", 8 "02", 9 "03", 10 "04", 11 "05", 12 "06", 1 ID FROM dual)
SELECT ID, COLUMN_ID, COLUMN_VALUE
  FROM ALSI_TEST_DELETE
UNPIVOT 
 (COLUMN_VALUE
  FOR COLUMN_ID IN ("01","02","03","04","05","06"))
 WHERE COLUMN_ID BETWEEN '01' AND '04'

This query might give you a start and you might end up with something like the following: 该查询可能为您提供了一个开始,并且您最终可能会遇到类似以下内容的情况:

SELECT ID, LISTAGG(column_id||': '||column_value,', ') within GROUP (ORDER BY column_id)
  FROM ALSI_TEST_DELETE
UNPIVOT 
 (COLUMN_VALUE
  FOR COLUMN_ID IN ("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53"))
 WHERE COLUMN_ID BETWEEN :dropdown1 AND :dropdown2
 GROUP BY ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM