[英]SQL Server how to select from a list of tables using information_schema.columns or sys.tables?
[英]How to select from a list of columns? SQL Server
我有一个通过SQL查询获得的列列表。
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
ORDER BY table_name
现在,对于每一列,我想查询有关该列的一些信息,并将它们放在一个表中。
例如,这是我将为单个列运行的查询。
Select Substring(col1, 1, 1) letter, Count(Substring(col1, 1, 1)) cnt
From tbl
Group By Substring(col1, 1, 1)
该子查询的作用是它获得列中记录的第一个字符的计数。 因此,例如,col1中可能有6个以字母'a'开头的记录,col1中有15个以字母'b'开头的记录,等等。
如何将这两个查询组合到一个表中,以便得到类似...
Table_Name, Column_Name, letter, cnt
tbl, col1, a, 6
tbl, col1, b, 15
tbl, col2, a, 5
...
你要这个 :
SELECT t.name AS table_name,
c.name AS column_name, t1.letter, count(*) as cnt
FROM sys.tables AS t INNER JOIN
sys.columns c
ON t.OBJECT_ID = c.OBJECT_ID
CROSS APPLY ( VALUES (Substring(c.name, 1, 1)) ) t1(letter)
GROUP BY t.name, c.name, t1.letter;
这有用吗?
DECLARE @query VARCHAR(Max)
SELECT @query=COALESCE(@query + ' union all ', '') + CAST('SELECT ''' +TABLE_SCHEMA+''' As [Schema],'''+TABLE_NAME+''' As TableName,'''+COLUMN_NAME+''' As ColumnName, Substring(['+COLUMN_NAME+'],1,1) letter,COUNT(Substring(['+COLUMN_NAME+'],1,1)) cnt
FROM '+TABLE_SCHEMA+'.'+TABLE_NAME+
' Group by Substring(['+COLUMN_NAME+'],1,1)' AS VARCHAR(MAX))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN('varchar','char','nvarchar')
--SELECT @query
Exec(@query)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.