sql - 如何将循环中的多个结果组合到一个临时表中
问题描述
我有这样的声明:
Declare @sql varchar(max) = ''
declare @tablename as varchar(255) = 'test'
select @sql = @sql + 'select [' + c.name + '],count(*) as ''' + c.name
+ ''' from [' + t.name + ']'
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = @tablename
EXEC (@sql)
但它使输出出现在不同的结果窗口中,当我尝试将它与联合组合时,所有文本都不适合它。我想尝试将结果放入 SQL Server 的临时表中,无论如何我可以做到这一点吗?
我试图得到:
Column Name Count Distinct Count
a 100 1
b 100 5
c 100 73
d 100 9
上面的陈述不是针对不同的计数,但我希望我可以复制相同的逻辑。
解决方案
我怀疑您要构建的查询看起来像:
select 'a' as column_name, count(column_name), count(distinct column_name)
from t
union all
select 'a' as column_name, count(column_name), count(distinct column_name)
from t
union all
. . .
要在 SQL Server 中构造它,您可以使用如下逻辑:
declare @q nvarchar(max);
set @q = '
select ''[column_name]'' as column_name, count([column_name]) as cnt, count(distinct [column_name]) as distinct_count
from [table_name]
';
declare @sql nvarchar(max);
select @sql = string_agg(replace(replace(@q,
'[column_name]',
quotename(column_name)
),
'[table_name]',
quotename(table_name)
), ' union all '
)
from information_schema.columns c
where table_name = @name; -- should probably check the schema too!
exec sp_executesql @sql;
推荐阅读
- python-3.x - What's the best way to send an e-mail via Python Google Cloud Function?
- java - 单元测试 mock 和 jUnit
- database - 如何从 web api .net 核心返回保存在数据库中的图像?
- javascript - React - 如何检测是否单击了子组件
- c# - '转换为值类型'System.Double'失败,因为具体化值为空
- linux - 如何在 Linux 中即时对文件进行别名或重命名?
- javascript - 使用 react-router 卸载组件
- r - R: PCA - 如何使用 svydesign 制作调查设计对象
- wordpress - Sitetarget 文件夹突然出现在我的 wordpress 网站中
- twig - 排序后在树枝中排序数组