我真的很难搞清楚如何将MS Access CrossTab查询转换为T-SQL,以便在SQL2000或Linq-to-SQL上运行。我有一个查询,看起来像这样在访问:SQL 2000 TSQL - 创建数据透视表
并产生这样的:通过项目ID和STOREID
查询基本上团体和总结的数量出售,但在Access中的交叉表查询,我可以为每个行都有一个唯一的ItemID,每个StoreID都有一个列,并且每个StoreID/ItemID组合的总数量为该值。
你如何在T-SQL 2000中构建这个?我可以使用分组构建一个简单的选择查询,但它会为我提供三列数据,即StoreID,ItemID和Qty。但我需要的是一个项目ID列,并在结果每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中这样做,我会在我使用的任何报告工具中执行交叉选项卡。例如,使用报告服务相对简单。 – Bert 2012-07-21 16:24:00
我同意。它让我坚信,在Access中需要2秒钟的时间,但我无法在T-SQL或Linq-to-SQL中找到它。 – 2012-07-21 16:53:11