这里有一个表,它在不同的环境中不断重复结果。
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*'
)