sql - 使用动态 SQL 循环遍历列名

标签 sql loops dynamic

我只是想出了一个想法,用一段代码来显示每列的所有不同值,并计算每列的记录数。我希望代码遍历所有列。

到目前为止,这是我所拥有的......我是 SQL 的新手,所以请忍受 noobness :)

硬编码:

  select [Sales Manager], count(*)
  from  [BT].[dbo].[test]
  group by [Sales Manager]
  order by 2 desc

尝试动态 SQL:
Declare @sql varchar(max),
@column as varchar(255)

    set @column = '[Sales Manager]'
    set @sql = 'select ' + @column + ',count(*) from [BT].[dbo].[test] group by ' + @column + 'order by 2 desc'

    exec (@sql)

这两个工作正常。我怎样才能让它循环遍历所有列?我不介意我是否必须对列名进行硬编码,它通过为@column 插入每个列名来工作。

这有意义吗?

谢谢大家!

最佳答案

您可以使用动态 SQL 并获取表的所有列名。然后构建脚本:

Declare @sql varchar(max) = ''
declare @tablename as varchar(255) = 'test'

select @sql = @sql + 'select [' + c.name + '],count(*) as ''' + c.name +  ''' from [' + t.name + '] group by [' + c.name + '] order by 2 desc; ' 
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name = @tablename

EXEC (@sql)

更改 @tablename到您的表的名称(没有数据库或架构名称)。

关于sql - 使用动态 SQL 循环遍历列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20463365/

相关文章:

c - 查看 execvp();

dynamic - Putty 动态标题(带 $PWD)

带有命名空间的 Javascript 动态函数调用

android - jBox2d android 绘制动态物体

java - SQL 语法异常 - 无效字符,但查询工作正常

c# - 排行榜,排名查询,如何返回高于/低于用户排名的行

sql - VB6语法问题, "no current record"错误

Java - 制作刽子手游戏

javascript - 以不同的时间间隔运行多个函数

php - 为什么只有在 Windows 上运行 PHP 而在 CentOS 上不显示此行?