首页 > 解决方案 > 在 SQL 中复制 VBA 解决方案

问题描述

我有一个 SQL 查询,它为我提供了“输出之前”图片中的输出。
第 5 列,如果本质上对第 1 列countif中的项目执行第 1 列,类似于 Excel。
我想添加一些代码/子查询,以便输出变得像“输出之后”图片。

有谁知道我该怎么做?
我可以用 VBA 在 excel 中做到这一点,但我无法理解如何在 SQL 中做到这一点。

输出之前
输出之前

输出后
输出后

标签: sqlsql-servervbatransposecountif

解决方案


您希望将多行连接成一个值。您的选项取决于您的 SQL Server 版本。在较旧的版本(我认为是 2005+)中,您必须使用痛苦的 XML 程序。在你的服务器上运行它,你会看到它是如何工作的,但我会留给你来计算你的数据查询:

SELECT  STUFF( 
     (SELECT    ', <' + name + '>'
      FROM      sys.databases
      WHERE     database_id > 4
      ORDER BY  name
        FOR   XML PATH('') ,
                  ROOT('MyString') ,
                  TYPE 
     ).value('/MyString[1]', 'varchar(max)'), 1, 2, '') AS namelist;

从 SQL 2017 开始,您可以使用 STRING_AGG 函数,在此处进行了说明。


推荐阅读