如何解决Microsoft Access 交叉表查询 - 如何转换为 MSSQL 视图
大家晚上好。
我正在将 Access 数据库转换为 PHP 和 MSsql。我有一个“交叉表”查询,我用它来列出所有客户经理和他们报价的销售额,我得到如下查询:
为了得到这个,我使用以下 sql:
TRANSFORM Sum(tblQuotes.pricetoCustomer) AS SumOfpricetoCustomer
SELECT Clients.AccountManager
FROM tblQuotes LEFT JOIN Clients ON tblQuotes.clientID = Clients.ID
GROUP BY Clients.AccountManager
PIVOT Format([tblQuotes].[dateProducted],'yyyy-mm');
我无法转换此查询。任何人都可以帮忙。
预先感谢您提供的任何帮助
解决方法
Access 有“动态交叉表查询”,而 SQL Server 没有。
您可以像在答案 here 中那样使用动态 SQL,但是由于您也在更改前端,因此您可能应该只使用 GROUP BY 查询并将结果格式化以在前端显示.例如
SELECT c.AccountManager,format(q.dateProduced,'yyyy-MM') Month,Sum(q.priceToCustomer) AS SumOfpriceToCustomer
FROM tblQuotes q
LEFT JOIN Clients c
ON q.clientID = c.ID
GROUP BY c.AccountManager,'yyyy-MM')
ORDER BY c.AccountManager,'yyyy-MM');
,
大卫布朗是对的。也许您应该考虑将其移至表示层。
也就是说,SQL Server 在设计上是声明式的。这留下了动态 SQL,它不能存在于视图中,但可以从存储过程中调用......或者......随着时间的推移需要扩展的视图。
示例
Select *
From (
SELECT Clients.AccountManager,Item = left([tblQuotes].[dateProducted],7) -- Assuming DATE and not DATETIME. Otherwise use your Format([tblQuotes].[dateProducted],'yyyy-mm'),Value = sum(tblQuotes.priceToCustomer)
FROM tblQuotes LEFT JOIN Clients ON tblQuotes.clientID = Clients.ID
GROUP BY Clients.AccountManager,left([tblQuotes].[dateProducted],7)
) src
Pivot ( sum(Value) for Item in ( [2018-01],[2018-02],[2018-03],[2018-04],[2018-05],[2018-06],[2018-07],[2018-08],[2018-09],[2018-10] -- Continue as Far as you like
) ) pvt
或者动态 SQL
Declare @SQL varchar(max) = '
Select *
From (
SELECT Clients.AccountManager,7),7)
) src
Pivot ( sum(Value) for Item in (' + stuff((Select Distinct ','+QuoteName( left([dateProducted],7) )
From tblQuotes
Order By 1
For XML Path('')),1,'') + ') ) pvt
'
Exec(@SQL);
--Print @SQL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。