tansx 2025-08-10 11:12 采纳率: 50%
浏览 5
已结题

用VB6如何写下面这段代码?

用VB6如何写下面这段代码?
DECLARE @cols NVARCHAR(MAX);
DECLARE @query NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(出勤情况)
FROM attendance_table
FOR XML PATH('')), 1, 1, '');

SET @query = 'SELECT 姓名,' + @cols +'FROM (
SELECT 姓名, 出勤情况, 次数
FROM attendance_table
) AS SourceTable
PIVOT (
SUM(次数)
FOR 出勤情况 IN (' + @cols + ')
) AS PivotTable';

EXEC sp_executesql @query;

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-08-10 11:14
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .  
    每日一句正能量,让它带给您好心情:不纠结过去,不畏惧将来,此刻即是最好。
    .  

    以下是将SQL Server动态PIVOT查询转换为VB6的代码实现:

    Private Sub ExecutePivotQuery()
        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim strSQL As String
        Dim strCols As String
        Dim strQuery As String
        
        ' 创建数据库连接
        Set conn = New ADODB.Connection
        conn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码;"
        conn.Open
        
        ' 获取动态列名
        strSQL = "SELECT STUFF((SELECT DISTINCT ',' + QUOTENAME(出勤情况) " & _
                  "FROM attendance_table FOR XML PATH('')), 1, 1, '') AS cols"
        
        Set rs = conn.Execute(strSQL)
        If Not rs.EOF Then
            strCols = rs("cols").Value
        End If
        rs.Close
        
        ' 构建动态PIVOT查询
        strQuery = "SELECT 姓名," & strCols & " " & _
                   "FROM (SELECT 姓名, 出勤情况, 次数 " & _
                   "FROM attendance_table) AS SourceTable " & _
                   "PIVOT (SUM(次数) FOR 出勤情况 IN (" & strCols & ")) AS PivotTable"
        
        ' 执行查询
        Set rs = conn.Execute(strQuery)
        
        ' 处理结果集...
        ' 例如显示在网格中或输出到文件
        
        ' 清理资源
        rs.Close
        conn.Close
        Set rs = Nothing
        Set conn = Nothing
    End Sub
    

    注意事项:

    1. 需要引用Microsoft ActiveX Data Objects库
    2. 连接字符串需要根据实际数据库配置修改
    3. 结果处理部分需要根据实际需求补充
    4. 如果列数很多,可能需要调整VB6的字符串长度限制

    对于更复杂的处理,可以考虑使用存储过程或在SQL Server端完成整个PIVOT操作,VB6只负责调用和显示结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月10日