Sql 获取按列名分组的列名和类型

Sql 获取按列名分组的列名和类型,sql,db2,Sql,Db2,我有IBMDB2数据库。我想让所有的列名、类型、长度和比例按表名分组 要从架构XYZ获取所有表,请执行以下操作: select name from SYSIBM.SYSTABLES where creator = 'XYZ'; 现在我可以得到给定表的列描述: SELECT NAME, COLTYPE, LENGTH, SCALE FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = 'sometablename' 我想把它分组: SELECT NAME, COLTYPE

我有IBMDB2数据库。我想让所有的列名、类型、长度和比例按表名分组

要从架构XYZ获取所有表,请执行以下操作:

select name
from SYSIBM.SYSTABLES
where creator = 'XYZ';
现在我可以得到给定表的列描述:

SELECT NAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSCOLUMNS
WHERE TBNAME = 'sometablename'
我想把它分组:

SELECT NAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSCOLUMNS
WHERE TBNAME in (select name from SYSIBM.systables where creator = 'XYZ') 
GROUP BY table_names_from_schema_xyz;

如何做到这一点?

尝试使用SYSIBM.systables进行内部连接,下面的示例可能会起作用

   select c.colname,
            t.tabname as tables, COLTYPE, LENGTH, SCALE
    from SYSIBM.SYSCOLUMNS c
    inner join SYSIBM.systables t on 
          t.tabschema = c.tabschema and t.tabname = c.tabname
    where t.type = 'T'
    and t.tabschema = 'XYZ'

    order by c.colname;
分组(在SQL意义上)只有在聚合函数的上下文中才有意义。 我怀疑您要查找的是按表名,然后按列名排序的输出,因此同一个表的所有列都“分组”在一起

此查询可能适合您

SELECT T.NAME AS TABNAME, C.NAME AS COLNAME, COLTYPE, LENGTH, SCALE
FROM SYSIBM.SYSTABLES T, SYSIBM.SYSCOLUMNS C
WHERE T.NAME = C.TBNAME
AND CREATOR = 'XYZ'
ORDER BY T.NAME, C.NAME;

只能从SYSCAT.COLUMNS中回答您的问题

select tabname, colname, typename, length, scale   
 from syscat.columns
where tabschema = 'XYZ' 
order by tabname, colno

你能告诉我你希望你的结果是什么样的吗?分组将不会提供列名等。因此,您可能需要其他内容-显示一个示例将帮助我们帮助您我希望获得给定架构中每个表的列名列表以及说明(类型、长度)。今天的提示:切换到现代的显式
JOIN
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。为什么上面的解析返回非不同值?此查询无效,应引发异常。不考虑在几个表中存在同一个列名的情况。现在只需要SQL语句中的内部连接看起来好多了!不过,您应该使用SYSCAT而不是SYSIBM。。。