首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有关SQL一个列查询多次显示的有关问题

2012-12-15 
有关SQL一个列查询多次显示的问题有一个查询,得到的结果为select YEAR(ShipDate) AS NN,MONTH(ShipDate) A

有关SQL一个列查询多次显示的问题
有一个查询,得到的结果为


select YEAR(ShipDate) AS NN,MONTH(ShipDate) AS YY,
SUM(coShipDetail.Amount*(case coOrder.CyNo when 100 then 1 when 101 then 0.8145 when 102 then 6.335 end))/10000 as AMT
from coShip
INNER JOIN coShipDetail ON coShip.ShipNo=coShipDetail.ShipNo
INNER JOIN coOrderDetail ON coOrderDetail.DetailNo=coShipDetail.COrderDetailNo
INNER JOIN coOrder   ON  coOrder.OrderNo=coOrderDetail.OrderNo
where YEAR(ShipDate) in (2011,2012,2013) 
Group by YEAR(ShipDate) ,MONTH(ShipDate)


NNYYAMT
201252907.46881656
201282062.00172383
201211452.81510354
2011102605.28769271
201172580.07436531
201113129.37040644
201142591.97323671
201222072.10832608
201292813.61357872
................

我想实现在这个查询后面多加一列,上个月的AMT,,请问如何修改上述查询呢!谢谢。
特别是2012年1月的结果,其上一个月的结果一定要显示出2011年12月的AMT结果。 
[最优解释]
select a.*,b.AMT as [上个月] 
from 
(
select  
YEAR(ShipDate) AS NN,MONTH(ShipDate) AS YY,
SUM(coShipDetail.Amount*(case coOrder.CyNo 
when 100 then 1 when 101 then 0.8145 when 102 then 6.335 end))/10000 as AMT
from coShip
INNER JOIN coShipDetail ON coShip.ShipNo=coShipDetail.ShipNo
INNER JOIN coOrderDetail ON coOrderDetail.DetailNo=coShipDetail.COrderDetailNo
INNER JOIN coOrder   ON  coOrder.OrderNo=coOrderDetail.OrderNo
where YEAR(ShipDate) in (2011,2012,2013) 
Group by YEAR(ShipDate) ,MONTH(ShipDate)
) a left join 
(
select  
YEAR(DATEADD(mm,1,ShipDate)) AS NN,MONTH(DATEADD(mm,1,ShipDate)) AS YY,
SUM(coShipDetail.Amount*(case coOrder.CyNo 
when 100 then 1 when 101 then 0.8145 when 102 then 6.335 end))/10000 as AMT
from coShip
INNER JOIN coShipDetail ON coShip.ShipNo=coShipDetail.ShipNo
INNER JOIN coOrderDetail ON coOrderDetail.DetailNo=coShipDetail.COrderDetailNo
INNER JOIN coOrder   ON  coOrder.OrderNo=coOrderDetail.OrderNo
where YEAR(ShipDate) in (2011,2012,2013) 
Group by YEAR(DATEADD(mm,1,ShipDate)) ,MONTH(DATEADD(mm,1,ShipDate))
) b
on a.NN=b.NN and a.YY=b.YY

[其他解释]
如果你不能直接从这个语句的结果中算出来,那就先算出来,然后和这个结果join 起来
[其他解释]
算出来,如何对应?
[其他解释]
你的表中能不能直接计算出上个月的AMT数据,可以的话直接,查询中再加一列
[其他解释]
上次有个哥们写了的,但是显示的显示本月是1月份的话,上个月就不能显示出来了
[其他解释]
先把头两列组合成dateteime字段,然后datediff
[其他解释]
没人帮忙写个嘛?
[其他解释]
select a.NN,a.YY,a.AMT,b.AMT
from 
(
select  row_number() over(order by YEAR(ShipDate),MONTH(ShipDate)) as rownum,


YEAR(ShipDate) AS NN,MONTH(ShipDate) AS YY,
SUM(coShipDetail.Amount*(case coOrder.CyNo 
when 100 then 1 when 101 then 0.8145 when 102 then 6.335 end))/10000 as AMT
from coShip
INNER JOIN coShipDetail ON coShip.ShipNo=coShipDetail.ShipNo
INNER JOIN coOrderDetail ON coOrderDetail.DetailNo=coShipDetail.COrderDetailNo
INNER JOIN coOrder   ON  coOrder.OrderNo=coOrderDetail.OrderNo
where YEAR(ShipDate) in (2011,2012,2013) 
Group by YEAR(ShipDate) ,MONTH(ShipDate)
) a,
(
select  row_number() over(order by YEAR(DATEADD(mm,-1,ShipDate)),MONTH(DATEADD(mm,-1,ShipDate))) as rownum,
SUM(coShipDetail.Amount*(case coOrder.CyNo 
when 100 then 1 when 101 then 0.8145 when 102 then 6.335 end))/10000 as AMT
from coShip
INNER JOIN coShipDetail ON coShip.ShipNo=coShipDetail.ShipNo
INNER JOIN coOrderDetail ON coOrderDetail.DetailNo=coShipDetail.COrderDetailNo
INNER JOIN coOrder   ON  coOrder.OrderNo=coOrderDetail.OrderNo
where YEAR(ShipDate) in (2011,2012,2013) 
Group by YEAR(DATEADD(mm,-1,ShipDate)) ,MONTH(DATEADD(mm,-1,ShipDate))
) b
where a.rownum=b.rownum


[其他解释]
引用:
SQL code1234567891011121314151617181920212223242526select a.NN,a.YY,a.AMT,b.AMTfrom (select  row_number() over(order by YEAR(ShipDate),MONTH(ShipDate)) as rownum,YEAR(ShipDate) AS NN,MONT……


这个查询结果计算出来的数据,本月和上月的结果一样!
[其他解释]
把之前的结果放到临时表里然后
select *,
       上个月=(select AMT from #tb where datediff(month,NN+YY+'00',a.NN+a.YY+'00')=1)
from #tb a
[其他解释]
引用:
把之前的结果放到临时表里然后
select *,
       上个月=(select AMT from #tb where datediff(month,NN+YY+'00',a.NN+a.YY+'00')=1)
from #tb a


完善一下呗,谢了。。  没有搞成功啊!汗颜
[其他解释]
引用:
Ruby code123456789101112131415161718192021222324252627select a.*,b.AMT as [上个月] from (select  YEAR(ShipDate) AS NN,MONTH(ShipDate) AS YY,SUM(coShipDetail.Amount*(case coOrder.CyNo when 10……



GOOD。。非常感谢

热点排行