如何在限制中使用SELECT的结果



这里有一个表,它在不同的环境中不断重复结果。

Cf:

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

…等等。

我尝试使用组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)

限制指令要求我输入"单个值";为了工作。难道不能创建一个变量或类似的东西吗?我试着和"AS"one_answers";WITH"但是我没有得到任何结果。

PS:我在DB2中,在一个Iseries环境中,Syscolumns是由系统

自动生成的。

是否试图从第一个可用的模式(环境)中获取表的列信息?试试这个

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*'
)

相关内容

  • 没有找到相关文章

最新更新