当前位置: 代码迷 >> Sql Server >> 怎么竖变横,得到分仓数量,以最新的时间及ID为最大值取值
  详细解决方案

怎么竖变横,得到分仓数量,以最新的时间及ID为最大值取值

热度:53   发布时间:2016-04-24 08:56:33.0
如何竖变横,得到分仓数量,以最新的时间及ID为最大值取值
仓库表x_stock
stock_id    stock_name
  1          A仓库
  2          B仓库
...         ...
商品库存明细表 x_proinoutitem
item_id        pro_id      pro_stock       pro_jcamount          pro_addtime
   1                    1                     1                          5                      2015-09-05
   2                    1                     1                          8                       2015-09-06
   3                    1                     2                          2                       2015-09-07

   4                     2                    1                           3                      2015-09-08
   5                     2                    1                           4                      2015-09-07
...
如何得到分仓数量 数量取库存明细表的pro_jcamount值,以最新的时间(pro_addtime)及ID(Item_id)为最大值取值
pro_id          A仓库                B仓库
     1                 8                           2
  2                     3                          0 
------解决思路----------------------
SELECT 
a.pro_id,
a.stock_name,
max(pro_jcamount) AS pro_jcamount
INTO #T3
FROM #T2 LEFT JOIN (
SELECT max(#t2.item_id)AS item_id, #T2.pro_stock, #T2.pro_id,#T1.stock_name,MAX(#T2.pro_addtime)AS pro_addtime
  FROM #T2
LEFT JOIN #T1 ON  #T2.pro_stock=#T1.stock_id
GROUP BY #t2.pro_id,#T1.stock_name,#T2.pro_stock
)a ON a.pro_id=#T2.pro_id AND a.pro_stock=#T2.pro_stock AND a.pro_addtime=#T2.pro_addtime AND a.item_id=#t2.item_id
WHERE a.pro_id IS NOT NULL 
GROUP BY a.pro_id,a.stock_name

declare @s varchar(max)
set @s='select pro_id'
SELECT @s=@s
+','+QUOTENAME(stock_name)
+N'=isnull( SUM(CASE stock_name WHEN '+QUOTENAME(stock_name,N'''')
+N' THEN pro_jcamount END),0)'
FROM #t3
GROUP BY stock_name

exec(@s+N'
FROM #t3  
GROUP BY pro_id')
  相关解决方案