【发布时间】:2012-07-20 13:48:04
【问题描述】:
我真的很想弄清楚如何将 MS Access CrossTab 查询转换为 T-SQL 以在 SQL2000 上运行或转换为 Linq-to-SQL。我有一个在 Access 中看起来像这样的查询:
并产生这个:
查询基本上按 ItemID 和 StoreID 分组,并对销售的数量求和,但使用 Access 中的 CrossTab 查询,我可以为每一行设置一个唯一的 ItemID,为每个 StoreID 设置一个列,以及每个 StoreID 的总数量/ItemID 组合作为值。
如何在 T-SQL 2000 中构造它?我可以使用分组构建一个简单的选择查询,但它提供了三列中的数据,StoreID、ItemID 和 Qty。但我需要的是 ItemID 的列和结果集中每个 StoreID 的列
SELECT Trans.TranSID as StoreID, TransDetail.TranItemID as ItemID, SUM(TransDetail.Qty) AS TotalQtyForStore
FROM Trans INNER JOIN
TransDetail ON Trans.TranID = TransDetail.TranID INNER JOIN
Item ON TransDetail.TranItemID = Item.ItemID
WHERE (Trans.TranDate > CONVERT(DATETIME, '2005-01-01 00:00:00', 102)) AND (Trans.TranTypeID = 'so' OR
Trans.TranTypeID = 'ca') AND (Trans.TranStatus <> 'v') AND (Item.ItemClassID = 'RHM')
GROUP BY Trans.TranSID, TransDetail.TranItemID
产生这个:
但我真正需要做的是转换这些数据,使 StoreID 值变成列,就像上面的 Access CrossTab 查询一样。
【问题讨论】:
-
我通常不会在 SQL 中执行此操作,我会在我使用的任何报告工具中执行交叉表。例如,使用报告服务相对简单。
-
我同意。它让我发疯,这样的事情在 Access 中需要 2 秒,但我无法在 T-SQL 或 Linq-to-SQL 中弄清楚。
标签: tsql linq-to-sql ms-access sql-server-2000 crosstab