db2 如何使用SELECT的结果限制

shstlldc  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(206)

我这里有一个表,它不断重复环境中的结果。
请参阅:

Select * from SYSCOLUMNS where table_name = '*EXAMPLE*'

RESULT 1 | RESULT B 1 | ENV 1
RESULT 2 | RESULT B 2 | ENV 1
RESULT 3 | RESULT B 3 | ENV 1
RESULT 1 | RESULT B 1 | ENV 2 
RESULT 2 | RESULT B 2 | ENV 2

...等等等等
我尝试使用group by,但由于编码方式略有变化,所以效果不佳。我也尝试指定环境,但从一台机器到另一台机器,环境会发生变化。但我确实有一个名为“Ordinal_Position“的列,它提供了一个排序ID,并且也会重复。
我想做的是使用它作为一个单一的值在我的限制。这里我给你看我的查询:

SELECT SYSTEM_COLUMN_NAME, DATA_TYPE, STORAGE, COLUMN_TEXT, COLUMN_NAME, COLUMN_HEADING
FROM SYSCOLUMNS
WHERE TABLE_NAME = '*EXAMPLE*'
LIMIT (SELECT ORDINAL_POSITION
        FROM SYSCOLUMNS
        WHERE TABLE_NAME = '*EXAMPLE*'
        GROUP BY ORDINAL_POSITION
        ORDER BY ORDINAL_POSITION DESC LIMIT 1)

limit指令要求我输入一个“单值”才能工作。是否可以创建一个变量或类似的东西?我尝试使用“AS”和“WITH”,但没有得到任何结果。
PS:我使用的是DB2,在一个Iseries环境中,Syscolumns是由系统自动生成的

8iwquhpp

8iwquhpp1#

是否尝试从第一个可用模式(环境)中获取表的列信息?请尝试以下操作

select  SYSTEM_COLUMN_NAME, DATA_TYPE, 
        STORAGE, COLUMN_TEXT, COLUMN_NAME, COLUMN_HEADING
from
(
        select   SYSTEM_COLUMN_NAME, DATA_TYPE, 
        STORAGE, COLUMN_TEXT, COLUMN_NAME, COLUMN_HEADING ,
        rank() over   ( order by  table_schema) as rank1
        from  qsys2.syscolumns  
        WHERE TABLE_NAME = '*EXAMPLE*'
 ) a
 where rank1 = 1

要使用select的结果来限制行,可以尝试以下操作

select SYSTEM_COLUMN_NAME, DATA_TYPE, 
      STORAGE, COLUMN_TEXT, COLUMN_NAME, COLUMN_HEADING
from
(
    select SYSTEM_COLUMN_NAME, DATA_TYPE, 
    STORAGE, COLUMN_TEXT, COLUMN_NAME, COLUMN_HEADING ,
     row_number()  over( order by table_schema) as rn1
    from  qsys2.syscolumns  
    WHERE TABLE_NAME = '*EXAMPLE*'
) a
where rn1 <= (SELECT MAX(ORDINAL_POSITION)
        FROM SYSCOLUMNS
        WHERE TABLE_NAME = '*EXAMPLE*'
)

相关问题