我真的很想弄清楚如何将 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 查询一样。