進銷存中的複雜報表之黃金鑽石區間段分析表

1.效果算法

2.報表簡介:查詢分銷商下類別組對應的區間範圍內數量統計。表頭是根據條件動態變化的。code

3.SQL
DECLARE @stime datetime,
        @etime Datetime;
 
 
SET @stime='2015/11/1 0:00:00'
SET @etime='2015/12/4 23:59:59'
 
  --------------------------------------------------------------天平均算法計算庫存---------------------------------------------
  --1.每一個分銷商、每一天 每一分數段、類別 的變化量 #temp-->
SELECT Sum(num) AS Num,
       agentid AS agentid,
       CateGDGroupID,
       CateGDGroupName,
       GoodAttrValGroup,
       Wrdname,
       MAX(wrid) AS wrid,
       DAY AS DAY,
       Max(addtime) AS AddTime INTO #temp
FROM
  (SELECT *,
          Dateadd(DAY, Datediff(DAY, 0, Dateadd(dd, 0, addtime)), 0) AS DAY
   FROM
     (SELECT rbarcode AS barcode,
             orderdetail_r.quantity AS num,
             fromagentid AS fromagentid,
             addtime
      FROM order_r
      INNER JOIN orderdetail_r ON orderno = rorderno
      WHERE addtime <= @etime
        AND addtime > @stime
      UNION ALL SELECT fbarcode AS barcode,
                       orderdetail_f.quantity AS num,
                       fagentid AS agentid,
                       addtime AS AddTime
      FROM order_f
      INNER JOIN orderdetail_f ON orderno = forderno
      AND order_f.status in(3,4)
      WHERE AddTime <= @etime
        AND AddTime > @stime
      UNION ALL SELECT fbarcode AS barcode, -orderdetail_f.quantity AS num,
                                             fromagentid AS agentid,
                                             addtime
      FROM order_f
      INNER JOIN orderdetail_f ON orderno = forderno
      AND order_f.status >= 2
      WHERE addtime <= @etime
        AND addtime > @stime
      UNION ALL SELECT dbarcode AS barcode,
                       orderdetail_d.quantity AS num,
                       dagentid AS agentid,
                       addtime AS addtime
      FROM order_d
      INNER JOIN orderdetail_d ON orderno = dorderno
      AND order_d.status IN(3,4)
      WHERE AddTime <= @etime
        AND AddTime > @stime
      UNION ALL SELECT dbarcode AS barcode, -orderdetail_d.quantity AS num,
                                             fromagentid AS agentid,
                                             addtime
      FROM order_d
      INNER JOIN orderdetail_d ON orderno = dorderno
      AND order_d.status >= 2
      WHERE addtime <= @etime
        AND addtime > @stime
      UNION ALL SELECT tbarcode AS barcode,
                       orderdetail_t.quantity AS num,
                       tagentid AS agentid,
                       addtime AS addtime
      FROM order_t
      INNER JOIN orderdetail_t ON orderno = torderno
      AND order_t.status = 4
      WHERE AddTime <= @etime
        AND AddTime > @stime
      UNION ALL SELECT tbarcode AS barcode, -orderdetail_t.quantity AS num,
                                             fromagentid AS agentid,
                                             addtime
      FROM order_t
      INNER JOIN orderdetail_t ON orderno = torderno
      AND order_t.status >= 2
      WHERE addtime <= @etime
        AND addtime > @stime
      UNION ALL SELECT ktbarcode AS barcode, -orderdetail_kt.quantity AS num,
                                              fromagentid AS agentid,
                                              addtime
      FROM order_kt
      INNER JOIN orderdetail_kt ON orderno = ktorderno
      AND order_kt.status >= 2
      WHERE addtime <= @etime
        AND addtime > @stime
      UNION ALL SELECT odbarcode AS barcode, -orderdetail_s.odquantity AS num ,
                                              sagentid AS agentid,
                                              addtime
      FROM order_s
      INNER JOIN orderdetail_s ON orderno = odorderno
      WHERE addtime <= @etime
        AND addtime > @stime) AS tt
   INNER JOIN
     (SELECT adminuserauthrelid
      FROM adminuserauth
      WHERE adminuserauthreltype = 4
        AND adminuserid =36) AS x ON x.adminuserauthrelid = tt.fromagentid
   INNER JOIN agent ON agent.agentid = tt.fromagentid
   WHERE agent.agentid IN (637,
                           647,
                           654,
                           655,
                           660,
                           669,
                           670,
                           671,
                           680,
                           687)) AS te
LEFT JOIN good ON good.goodbarcode = te.barcode
INNER JOIN
  (SELECT CateGDGroupID,
          CateGDCateID,
          CateGDGroupName
   FROM categroupdetail
   WHERE CateGDGroupID=157) AS categroupdetail ON good.GoodCateID=categroupdetail.CateGDCateID
INNER JOIN WeightRDetail ON Good.GoodGoldWeight>=WRDFrom
AND Good.GoodGoldWeight <= WRDTo
INNER JOIN GoodAttrVal ON GoodDecoName=GoodAttrVal.GoodAttrValue
WHERE WRID = 21
GROUP BY agentid,CateGDGroupID,DAY,CateGDGroupName,
                                   WRDName,
                                   GoodAttrValGroup
ORDER BY agentid,DAY,CateGDGroupID,
                     CateGDGroupName
 
 
  --2.生成全集 ##temp_kc_day-->
SELECT TOP(Datediff(d, Dateadd(dd, -1, @stime), @etime)) IDENTITY(int, 1, 1) AS id INTO #date
FROM syscolumns
SELECT agent.agentid AS AgentID,
       agent.agentname,
       agent.agentbigarea,
       WeightRDetail.WRDName,
       CateGroupDetail.CateGDGroupID,
       CateGroupDetail.CGName,
       goodattrvalgroup,
       CateGroupDetail.CGRank,
       CateGroupDetail.CGType,
       CONVERT(DATETIME, Dateadd(d, #date.id, Dateadd(dd, -1, @stime)), 112) AS date,
       Cast(0 AS NUMERIC(12, 2)) AS stock,
       Cast(0 AS NUMERIC(12, 2)) AS stocks INTO #temp_kc_day
FROM #date
LEFT JOIN
  (SELECT CateGDGroupID,
          categroup.CGName,
          categroup.CGRank,
          categroup.CGType
   FROM categroupdetail
   INNER JOIN CateGroup ON categroup.CateGroupID=CateGroupDetail.CateGDGroupID
   WHERE CateGDGroupID=157
   GROUP BY CateGDGroupID,
            categroup.CGName,
            categroup.CGRank,
            categroup.CGType) AS categroupdetail ON 1=1
LEFT JOIN agent ON agent.agentid IN
  (SELECT adminuserauthrelid
   FROM adminuserauth
   JOIN agent ON adminuserauth.adminuserauthrelid = agent.agentid
   WHERE adminuserauthreltype = 4
     AND adminuserid = 36
     AND adminuserauth.adminuserauthrelid IN (637,
                                              647,
                                              654,
                                              655,
                                              660,
                                              669,
                                              670,
                                              671,
                                              680,
                                              687))
LEFT JOIN WeightRDetail ON 1=1
AND WRID =21
LEFT JOIN
  (SELECT goodattrvalgroup
   FROM goodattrval AS x
   WHERE 1=1
     AND goodattrcode='DecoName'
     AND goodattrvalgroup !=''
     AND goodattrvalgroup IS NOT NULL
   GROUP BY goodattrvalgroup) AS x ON 1=1 DECLARE @AddTime_FromT DATETIME;
 
 
 --3.根據歷史庫存計算期初 ##temp_begin-->
SET @AddTime_FromT=
  (SELECT Isnull(Max(addtime), '2014/6/1 0:00:00')
   FROM goodshis
   WHERE addtime <= @stime);
 
SELECT * INTO #temp_begin
FROM
  (SELECT SUM (num) AS num,
              t.agentid AS AgentID,
              CateGDGroupID,
              CateGDGroupName,
              WRDName,
              goodattrvalgroup
   FROM
     (SELECT *
      FROM
        (SELECT od.barcode AS Barcode, od.agentid AS agentid, SUM(num) AS num,
                                                                 Max(addtime) AS addtime
         FROM
           (SELECT barcode,
                   num,
                   agentid,
                   addtime
            FROM goodshis
            WHERE addtime = @AddTime_FromT
            UNION ALL SELECT fbarcode AS barcode,
                             orderdetail_f.quantity AS num,
                             fagentid AS agentid,
                             AddTime
            FROM order_f
            INNER JOIN orderdetail_f ON orderno = forderno
            WHERE ((order_f.status = 3
                    AND addtime <= @AddTime_FromT)
                   OR (order_f.status = 4
                       AND addtime <= @AddTime_FromT
                       AND confitime > @AddTime_FromT))
            UNION ALL SELECT dbarcode AS barcode,
                             orderdetail_d.quantity AS num,
                             dagentid AS agentid,
                             AddTime
            FROM order_d
            INNER JOIN orderdetail_d ON orderno = dorderno
            WHERE ((order_d.status = 3
                    AND addtime <= @AddTime_FromT)
                   OR (order_d.status = 4
                       AND addtime <= @AddTime_FromT
                       AND confitime > @AddTime_FromT))
            UNION ALL SELECT tbarcode AS barcode,
                             orderdetail_t.quantity AS num,
                             tagentid AS agentid,
                             AddTime
            FROM order_t
            INNER JOIN orderdetail_t ON orderno = torderno
            WHERE ((order_t.status = 3
                    AND addtime <= @AddTime_FromT)
                   OR (order_t.status = 4
                       AND addtime <= @AddTime_FromT
                       AND confitime > @AddTime_FromT))
            UNION ALL SELECT rbarcode AS barcode,
                             orderdetail_r.quantity AS num,
                             fromagentid AS agentid,
                             addtime
            FROM order_r
            INNER JOIN orderdetail_r ON orderno = rorderno
            WHERE addtime <= @stime
              AND addtime >= @stime
            UNION ALL SELECT fbarcode AS barcode,
                             orderdetail_f.quantity AS num,
                             fagentid AS agentid,
                             AddTime AS AddTime
            FROM order_f
            INNER JOIN orderdetail_f ON orderno = forderno
            AND order_f.status IN(3,
                                  4)
            WHERE AddTime <= @stime
              AND AddTime >= @AddTime_FromT
            UNION ALL SELECT fbarcode AS barcode, -orderdetail_f.quantity AS num,
                                                   fromagentid AS agentid,
                                                   addtime
            FROM order_f
            INNER JOIN orderdetail_f ON orderno = forderno
            AND order_f.status >= 2
            WHERE addtime <= @stime
              AND addtime >= @AddTime_FromT
            UNION ALL SELECT dbarcode AS barcode,
                             orderdetail_d.quantity AS num,
                             dagentid AS agentid,
                             addtime AS addtime
            FROM order_d
            INNER JOIN orderdetail_d ON orderno = dorderno
            AND order_d.status in(3,4)
            WHERE AddTime <= @stime
              AND AddTime >= @AddTime_FromT
            UNION ALL SELECT dbarcode AS barcode, -orderdetail_d.quantity AS num,
                                                   fromagentid AS agentid,
                                                   addtime
            FROM order_d
            INNER JOIN orderdetail_d ON orderno = dorderno
            AND order_d. status >= 2
            WHERE addtime <= @stime
              AND addtime >= @AddTime_FromT
            UNION ALL SELECT tbarcode AS barcode,
                             orderdetail_t.quantity AS num,
                             tagentid AS agentid,
                             addtime AS addtime
            FROM order_t
            INNER JOIN orderdetail_t ON orderno = torderno
            AND order_t.status in(3,4)
            WHERE AddTime <= @stime
              AND AddTime >= @AddTime_FromT
            UNION ALL SELECT tbarcode AS barcode, -orderdetail_t.quantity AS num,
                                                   fromagentid AS agentid,
                                                   addtime
            FROM order_t
            INNER JOIN orderdetail_t ON orderno = torderno
            AND order_t.status >= 2
            WHERE addtime <= @stime
              AND addtime >= @AddTime_FromT
            UNION ALL SELECT ktbarcode AS barcode, -orderdetail_kt.quantity AS num,
                                                    fromagentid AS agentid,
                                                    addtime
            FROM order_kt
            INNER JOIN orderdetail_kt ON orderno = ktorderno
            AND order_kt.status >= 2
            WHERE addtime <= @stime
              AND addtime >= @AddTime_FromT
            UNION ALL SELECT odbarcode AS barcode, -orderdetail_s.odquantity AS num,
                                                    sagentid AS agentid,
                                                    addtime
            FROM order_s
            INNER JOIN orderdetail_s ON orderno = odorderno
            WHERE addtime <= @stime
              AND addtime >= @AddTime_FromT) AS od
         INNER JOIN
           (SELECT adminuserauthrelid
            FROM adminuserauth
            WHERE adminuserauthreltype = 4
              AND adminuserid =36) AS x ON x.adminuserauthrelid = od.agentid
         INNER JOIN agent ON agent.agentid = od.agentid
         WHERE agent.agentid IN (637,
                                 647,
                                 654,
                                 655,
                                 660,
                                 669,
                                 670,
                                 671,
                                 680,
                                 687)
         GROUP BY od.agentid,
                  od.barcode) AS gh
      WHERE num != 0) AS t
   INNER JOIN good ON goodbarcode = barcode
   INNER JOIN
     (SELECT CateGDGroupID,
             CateGDCateID,
             CateGDGroupName
      FROM categroupdetail
      WHERE CateGDGroupID=157) AS categroupdetail ON good.GoodCateID=categroupdetail.CateGDCateID
   INNER JOIN WeightRDetail ON Good.GoodGoldWeight>=WRDFrom
   AND Good.GoodGoldWeight <= WRDTo
   AND WRID = 21
   INNER JOIN GoodAttrVal ON GoodDecoName=GoodAttrVal.GoodAttrValue
   WHERE 1=1
   GROUP BY t.agentid,
            CateGDGroupID,
            CateGDGroupName,
            WRDName,
            goodattrvalgroup) AS t1
 
 --4.將變更數據更新到全集           
UPDATE #temp_kc_day
SET stock =Num
FROM #temp_kc_day
INNER JOIN #temp ON #temp_kc_day.agentid = #temp.agentid
AND #temp_kc_day.date = #temp.DAY
AND #temp.CateGDGroupID=#temp_kc_day.CateGDGroupID
AND #temp.WRDName = #temp_kc_day.WRDName
AND #temp.GoodAttrValGroup = #temp_kc_day.GoodAttrValGroup
 
 --5.根據 庫存=變更+起初 計算出天天的庫存-->
 DECLARE @i INT
SET @i=0 WHILE @i <= Datediff(dd, @stime, @etime) BEGIN
UPDATE #temp_kc_day
SET stocks = Isnull(x.stock, 0) + #temp_begin.Num
FROM #temp_kc_day
LEFT JOIN
  (SELECT SUM(Isnull(stock, 0)) AS stock,
          agentid,
          CateGDGroupID,
          WRDName,
          GoodAttrValGroup
   FROM #temp_kc_day
   WHERE Datediff(dd, @stime, date) <= @i
   GROUP BY agentid,
            CateGDGroupID,
            WRDName,
            GoodAttrValGroup)AS x ON x.agentid = #temp_kc_day.agentid
AND x.CateGDGroupID=#temp_kc_day.CateGDGroupID
AND x.WRDName =#temp_kc_day.WRDName
AND x.GoodAttrValGroup =#temp_kc_day.GoodAttrValGroup
LEFT JOIN #temp_begin ON #temp_begin.agentid = #temp_kc_day.agentid
AND #temp_begin.CateGDGroupID=#temp_kc_day.CateGDGroupID
AND #temp_begin.WRDName=#temp_kc_day.WRDName
AND #temp_begin.GoodAttrValGroup=#temp_kc_day.GoodAttrValGroup
WHERE Datediff(dd, @stime, #temp_kc_day.date) = @i
  SET @i=@i + 1 END;
 
--6.天平均庫存數
SELECT AgentID AS goodagentid,
       CateGDGroupID,
       WRDName,
       goodattrvalgroup,
       cast(CASE count(stocks) WHEN 0 THEN cast(0.00 AS numeric(12,2)) ELSE SUM(stocks) / Count(stocks) END AS NUMERIC(12, 2)) AS goodstock INTO #teamp1
FROM #temp_kc_day
GROUP BY AgentID,
         CateGDGroupID,
         WRDName,
         GoodAttrValGroup
------------------------------------------------天平均算法計算庫存 結束----------------------------------       
 
 
--7.生成 區域,分銷,分數段 全集  
SELECT agentbigarea,
       agentname,
       x.wrdid,
       x.wrdname,
       x.goodattrvalgroup,
       isnull(goodstock,0) AS quantity INTO #END
FROM
  (SELECT agentid,
          agentname,
          agentbigarea,
          goodattrvalgroup,
          weightrdetail.*
   FROM agent
   LEFT JOIN WeightRDetail ON 1=1
   AND wrid=21
   LEFT JOIN
     (SELECT goodattrvalgroup
      FROM goodattrval AS x
      WHERE 1=1
        AND goodattrcode='DecoName'
        AND goodattrvalgroup !=''
        AND goodattrvalgroup IS NOT NULL
      GROUP BY goodattrvalgroup) AS x ON 1=1
   WHERE 1=1
     AND agentid IN
       (SELECT AdminUserAuthRelID
        FROM AdminUserAuth
        WHERE AdminUserAuthRelType=4
          AND AdminUserID= 36)
     AND agentid IN (637,
                     647,
                     654,
                     655,
                     660,
                     669,
                     670,
                     671,
                     680,
                     687))AS x
LEFT JOIN #teamp1 AS y ON x.agentid=y.goodagentid
AND x.WRDName=y.WRDName
AND x.goodattrvalgroup=y.goodattrvalgroup
 
--8.插入區域小計
INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT agentbigarea+' -小計',
                    '',
                    wrdid,
                    wrdname,
                    goodattrvalgroup,
                    sum(quantity)
FROM #END
GROUP BY agentbigarea,
         wrdid,
         wrdname,
         goodattrvalgroup
 
--9.插入總合計         
INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT '總合計',
       '',
       wrdid,
       wrdname,
       goodattrvalgroup,
       sum(quantity)
FROM #END
WHERE agentbigarea NOT LIKE '%小計%'
  AND agentbigarea NOT LIKE '%合計%'
GROUP BY wrdid,
         wrdname,
         goodattrvalgroup
 
--插入最後列總合計   排序在最後 wrdid寫入很大的數字       
INSERT INTO #end(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT agentbigarea,
       agentname,
       99999,
       '總合計',
       '',
       sum(quantity)
FROM #END
GROUP BY agentbigarea,
         agentname
 
 
 
-----------------------------------------------------------按銷售--------------------------------------------------------     
 
 
SELECT wrdid,
       sagentid,
       wrdname ,
       --無匹配到的默認成 其餘  
       isnull(goodattrvalgroup,'其餘') AS goodattrvalgroup ,
       sum(odquantity) AS quantity INTO #teamp2
FROM
--取區間段配置  程序裏設置一個選擇框默認第一組石重配置,可由操做員本身更改石重方案
  (SELECT *
   FROM WeightRDetail
   WHERE wrid=21)
   AS x 
LEFT JOIN
 ----若是是庫存數據 將整個y替換成庫存算法  (若是是週轉表  須要同時計算庫存和銷售)
  (
--取值 這裏是取銷售 鏈接重量範圍表時直接取good表數據(正數);石重按單粒計算;數量爲0的補1-除數不能爲0
--全部帶除法的地方 除數都要作0處理
  SELECT cast(GoodGoldWeight AS numeric(12,3)) AS goodctrange ,
          odquantity,
          order_s.sagentid ,
          gooddeconame
   FROM orderdetail_s
   INNER JOIN order_s ON odorderno=order_s.orderno
   LEFT JOIN good ON good.goodbarcode=odbarcode
   INNER JOIN agent ON agentid = SAgentID
   WHERE order_s.addtime>='2015/11/1 0:00:00'
     AND order_s.addtime <= '2015/12/4 23:59:59'
     AND agentid IN
       (SELECT AdminUserAuthRelID
        FROM AdminUserAuth
        WHERE AdminUserAuthRelType=4
          AND AdminUserID= 36)
     AND SAgentID IN (637,
                      647,
                      654,
                      655,
                      660,
                      669,
                      670,
                      671,
                      680,
                      687)
     AND goodcateid IN
       (SELECT categdcateid
        FROM CateGroupDetail
        WHERE categdgroupid =157)) AS y 
--區間配置和數據結果關聯 on用範圍比較
        ON x.wrdfrom <= goodctrange
AND x.wrdto>=goodctrange
LEFT JOIN
  (SELECT goodattrvalue,
          goodattrvalgroup
   FROM goodattrval AS x
   WHERE 1=1
     AND goodattrcode='DecoName'
     AND goodattrvalgroup !=''
     AND goodattrvalgroup IS NOT NULL) AS z ON y.gooddeconame=z.goodattrvalue
--分組條件  分銷商代碼,範圍名,範圍id  範圍名能夠忽略 傳id便可
GROUP BY sagentid,
         wrdname,
         wrdid,
         isnull(goodattrvalgroup,'其餘')
ORDER BY wrdid
 
--生成結果全集集合;報表展現的界面是完整的 可是數據可能有null的狀況 必須取一個完整集合;
SELECT agentbigarea,
       agentname,
       x.wrdid,
       x.wrdname,
       x.goodattrvalgroup,
       isnull(quantity,0) AS quantity INTO #end1
FROM
  (SELECT agentid,
          agentname,
          agentbigarea,
          goodattrvalgroup,
          weightrdetail.*
   FROM agent
   LEFT JOIN WeightRDetail ON 1=1
   AND wrid=21
   LEFT JOIN
     (SELECT goodattrvalgroup
      FROM goodattrval AS x
      WHERE 1=1
        AND goodattrcode='DecoName'
        AND goodattrvalgroup !=''
        AND goodattrvalgroup IS NOT NULL
      GROUP BY goodattrvalgroup) AS x ON 1=1
   WHERE 1=1
     AND agentid IN
       (SELECT AdminUserAuthRelID
        FROM AdminUserAuth
        WHERE AdminUserAuthRelType=4
          AND AdminUserID= 36)
     AND agentid IN (637,
                     647,
                     654,
                     655,
                     660,
                     669,
                     670,
                     671,
                     680,
                     687))AS x
LEFT JOIN #teamp2 AS y ON x.agentid=y.sagentid
AND x.wrdid=y.wrdid
AND x.goodattrvalgroup=y.goodattrvalgroup
 
 
--插入區域小計 
INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT agentbigarea+' -小計',
                    '',
                    wrdid,
                    wrdname,
                    goodattrvalgroup,
                    sum(quantity)
FROM #end1
GROUP BY agentbigarea,
         wrdid,
         wrdname,
         goodattrvalgroup
 
--插入總合計      
INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT '總合計',
       '',
       wrdid,
       wrdname,
       goodattrvalgroup,
       sum(quantity)
FROM #end1
WHERE agentbigarea NOT LIKE '%小計%'
  AND agentbigarea NOT LIKE '%合計%'
GROUP BY wrdid,
         wrdname,
         goodattrvalgroup
 
--插入最後列總合計   排序在最後 wrdid寫入很大的數字    
INSERT INTO #end1(agentbigarea,agentname,wrdid,wrdname,goodattrvalgroup,quantity)
SELECT agentbigarea,
       agentname,
       99999,
       '總合計',
       '',
       sum(quantity)
FROM #end1
GROUP BY agentbigarea,
         agentname
 
--合併銷售和庫存數據 #tempEnd
SELECT e.*,
       r.quantity AS quantity1,
       e.quantity/ (CASE r.quantity
                        WHEN 0 THEN 1
                        WHEN NULL THEN 1
                        ELSE r.quantity
                    END) AS quantity2 INTO #tempEnd
FROM #end1 e
LEFT JOIN #END r ON e.AgentName=r.AgentName
AND e.WRDID=r.WRDID
AND e.GoodAttrValGroup= r.GoodAttrValGroup and e.AgentBigArea=r.AgentBigArea
 
 
--動態行轉列
 DECLARE @subSql nvarchar(MAX)
SET @subSql = 'select Row_Number() over(order by agentbigarea,agentname) as RowNumber            , 
AgentBigArea as AgentBigArea,AgentName'
SELECT @subSql = @subSql + ',SUM(case wrdname+goodattrvalgroup when ''' + wrdname+goodattrvalgroup+ ''' then
 quantity else 0 end) as [' + wrdname+'|'+goodattrvalgroup + '|銷售]            ,SUM(case wrdname+goodattrvalgroup
  when ''' + wrdname+goodattrvalgroup+ ''' then quantity1 else 0 end) as [' + wrdname+'|'+goodattrvalgroup + '|庫存]           
   ,SUM(case wrdname+goodattrvalgroup when ''' + wrdname+goodattrvalgroup+ ''' then quantity2 else 0 end) as
    [' + wrdname+'|'+goodattrvalgroup + '|週轉]'
 
FROM
  (SELECT TOP 10000 wrdname,
                    goodattrvalgroup
   FROM #tempEnd
   GROUP BY goodattrvalgroup,
            wrdname
   ORDER BY goodattrvalgroup,
            Max(wrdid)) AS a
SET @subSql = @subSql + ' from #tempEnd group by AgentBigArea,agentname' print @subSql EXEC (@subSql)
 
 
--select * from #tempEnd
 
--select * from #end1
 
--select * from #END
 
3.技術點:天平均庫存算法,動態行轉列等
相關文章
相關標籤/搜索