declare @s nvarchar(max) SET @s= ''
SELECT @s= @s+ ',' + quotename(TT.应付日期)
FROM ((SELECT ************)) AS TT
where (TT**************)
group by TT.应付日期
order by TT.应付日期
SET @s= STUFF(@s,1,1,'' )
declare @sql nvarchar(max)
exec( 'SELECT ***********)) AS TT
where (TT********)
group by ***** order by TT*** ) t pivot (sum(未付款金额) for 应付日期 in ('+@s+')) a' )
语法方面,mssql里面怎么写,excel就怎么写,完全一样的。
不同的是需要定义ado对象才能引用mssql数据库,有好几种写法,下面是其中一种:
Dim Cn As Object
Dim Rec As Object
Dim strSql As String
Set Cn = CreateObject("adodb.connection") '创建ado对象
Set Rec = CreateObject("ADODB.Recordset") '创建ado数据集
'下面是连接mssql数据库,这里的参数不能错。如果不能通过,基本上错误的可能性都在这个地方
Cn.Open "rovider=SQLOLEDB.1;Integrated Security=SSPIersist Security Info=True;Initial Catalog=数据库名称写在这里;Data Source=数据库服务器名称写在这里;Use Procedure for Prepare=1;Auto Translate=Trueacket Size=4096;Workstation ID=电脑ID写在这里;Use Encryption for Data=False;Tag with column collation when possible=False"
'定义sql语句
strSql = "select ..... from 数据库表名称 where .... order by ....." 'sql里怎么写,这里也怎么写,一样的
Set Rec = Cn.Execute(strSql) '执行sql语句,数据集结果在Rec对象中返回
剩下的就是你如何去使用返回的Rec数据集了。
最简单的就是全部一次性写在excel里
Range("A1").CopyFromRecordset Rec '从 a1单元格开始写入数据
也可以自定义处理,通常是循环,好处是可以自定义处理数据:
While Not Rec.EOF
x1 = Rec1.Fields(0).Value '读取第一个字段
x2 = Rec1.Fields(1).Value '读取第二个字段
.......
对读取的数据做自定义处理
......
Rec.MoveNext
Wend
Rec.Close ‘关闭对象’
Cn.Close