繁体   English   中英

如何从列表中进行选择? SQL Server

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM