我已经工作了大约两周,为我工作的公司建立了一些详细的报告选项。上周或前一周的某个时候,我在这里问了一个问题,这让我开始了一个问题,最终我大大地收紧了这个问题。
我从一个库存账本开始,它只记录单个交易。我们的目标是建立一个更全面的账本,它将保持运行库存总额,运行销售总额,如果一个项目脱销,它将跟踪天数,直到重新供应。
最初的查询使用了With ...语句在对聚合列执行自联接之前定义表及其聚合。不幸的是,我不能做同样的事情来创建视图,所以我需要找到一种方法来以不同的方式创建这些聚合,以便仍然允许我在它们上自连接以保持我的总计的顺序。
到目前为止,我是如何重新组织我的语句的:
Create View 'QLedger' as
Select tcum.txnid,
tcum.Item,
tcum.TxnDate,
tcum.[Tran Type],
tcum.Quantity,
tcum.cumq
from (select *, SUM( Quantity )
OVER (PARTITION BY InventoryLedger.Item
ORDER BY InventoryLedger.TxnID
ROWS UNBOUNDED PRECEDING ) cumq,
abs(
sum(
case when [Tran Type] = 'Shipping'
or [Tran Type] = 'Customer Return'
then Quantity end)
over (partition by qryrptInventoryLedger.item
order by InventoryLedger.txnid
rows unbounded preceding)) LifeSales
from InventoryLedger) tcum
left outer join InventoryLedger tcumnext
on tcum.Item = tcumnext.Item
and tcum.TxnID < tcumnext.TxnID
and
tcum.cumq = 0 and tcumnext.cumq >0
where tcum.Item = '103-02'
and tcum.cumq = 0
group by tcum.TxnID, tcum.TxnDate, tcum.Item, tcum.[tran type], tcum.Quantity这几乎是正确的,除了我要自连接到的表(tcumnext)没有要与tcum进行比较的运行/累积数量列。我根本想不出怎么做才能与之相比。有人能帮我吗?我真的很感激。这是令人兴奋和沮丧的是,在这么长时间的工作之后,如此之近。
发布于 2012-07-25 01:23:53
您可以在视图中使用with语句:
create view xxx as
with <blah blah blah>
select <your query>这解决了你的问题吗?
发布于 2012-07-25 01:39:15
如果您已经在查询中使用with解决了聚合函数问题,那么您也可以使用视图来解决这个问题。
下面是一个使用with子句的视图示例,该子句包含聚合函数:
http://social.msdn.microsoft.com/Forums/sk/sqlgetstarted/thread/302040c6-6a1b-4f99-8a1d-84bb196cb5e6
第一个帖子。
希望这会有帮助=)
https://stackoverflow.com/questions/11635971
复制相似问题