Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2012 无法消除重复项和数量总和_Sql Server 2012 - Fatal编程技术网

Sql server 2012 无法消除重复项和数量总和

Sql server 2012 无法消除重复项和数量总和,sql-server-2012,Sql Server 2012,我正在编写一个SQL语句,以便创建一个cron作业,以获取有关产品库存和退货的csv文件。然而,当我运行它时,即使我对数量求和,我仍然会得到sku代码的重复项,看起来它没有对退货数量求和 请看下面的代码,非常感谢 SELECT DISTINCT p.part , p.identifier , p.descr , supl.full_name AS supplier , pgrp.descr AS groupd , fam.descr AS family , pt.

我正在编写一个SQL语句,以便创建一个cron作业,以获取有关产品库存和退货的csv文件。然而,当我运行它时,即使我对数量求和,我仍然会得到sku代码的重复项,看起来它没有对退货数量求和

请看下面的代码,非常感谢

SELECT DISTINCT
    p.part
,   p.identifier
,   p.descr
,   supl.full_name AS supplier
,   pgrp.descr AS groupd
,   fam.descr AS family
,   pt.part_cost AS Cost_GBP
,   ISNULL((
            SELECT
                SUM(qty - ISNULL(qty_received, 0))
            FROM
                pord_line AS pl
            WHERE
                status < 31
                AND p.part = pl.part
                AND qty - ISNULL(qty_received, 0) > 0
           ), 0) AS OnPO
,   (
     SELECT TOP 1
        pb.bcode
     FROM
        part_barc pb WITH (NOLOCK)
     WHERE
        pb.part = p.part
        AND pb.bcode LIKE '5%'
        AND LEN(pb.bcode) = 13
     ORDER BY
        pb.last_updated DESC
    ) AS EAN
,   (
     SELECT TOP 1
        v.price
     FROM
        vprice_list v
     WHERE
        v.part = p.part
        AND v.volume = 1
        AND v.price_list = 'WEB UK'
    ) AS RRP_GBP
,   (
     SELECT TOP 1
        v.price
     FROM
        vprice_list v
     WHERE
        v.part = p.part
        AND v.volume = 1
        AND v.price_list = 'WEB US'
    ) AS RRP_USD
,   p.status
,   p.obs_code
,   (CASE WHEN p.obs_code = 0 THEN 0
          ELSE 100
     END) AS obslink
,   ISNULL(RTRIM(dbo.[fn_get_attr_value]('WEB', 'TEXT2', p.part, 1)), '') AS long_descr
,   t.Main_Store_Total_Stock
,   t.Main_Store_Allocated
,   f.Assay_Office_Total_Stock
,   f.Assay_Office_Allocated
,   g.Consigment_Stock_Total_Stock
,   g.Consigment_Stock_Allocated
,   h.Customer_Returns_Total_Stock
,   h.Customer_Returns_Allocated
,   j.Despatch_Total_Stock
,   j.Despatch_Allocated
,   k.Goods_in_Total_Stock
,   k.Goods_in_Allocated
,   l.Harrods_Total_Stock
,   l.Harrods_Allocated
,   m.Inspection_Total_Stock
,   m.Inspection_Allocated
,   n.Liberty_Total_Stock
,   n.Liberty_Allocated
,   o.Repair_Store_Total_Stock
,   o.Repair_Store_Allocated
,   q.Return_from_Supplier_Total_Stock
,   q.Return_from_Supplier_Allocated
,   r.Selfridges_Trafford_Total_Stock
,   r.Selfridges_Trafford_Allocated
,   u.Selfridges_Oxford_Total_Stock
,   u.Selfridges_Oxford_Allocated
,   w.Supplier_Returns_Total_Stock
,   w.Supplier_Returns_Allocated
,   x.UK_Press_Total_Stock
,   x.UK_Press_Allocated
,   y.US_Press_Total_Stock
,   y.US_Press_Allocated
FROM
    part p
    LEFT JOIN part_plan pp1
    ON pp1.part = p.part
    LEFT JOIN part_pnar pnar
    ON pnar.part = p.part
    LEFT JOIN pgrp
    ON pgrp.prod_group = p.prod_group
    LEFT JOIN faml_pgrp fam
    ON fam.prod_family = pgrp.prod_family
    LEFT JOIN sgrp
    ON sgrp.sales_group = p.sales_group
    LEFT JOIN supl
    ON supl.supplier = pp1.prefer_supplier
    LEFT JOIN part_trad pt
    ON p.part = pt.part
    LEFT JOIN part_bins pp
    ON p.part = pp.part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Main_Store_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Main_Store_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Main Store'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS t
    ON p.part = t.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Assay_Office_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Assay_Office_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Assay Office'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS f
    ON p.part = f.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Consigment_Stock_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Consigment_Stock_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Consigment Stock'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS g
    ON p.part = g.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Customer_Returns_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Customer_Returns_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Customer Returns'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS h
    ON p.part = h.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Despatch_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Despatch_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Despatch'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS j
    ON p.part = j.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Goods_in_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Goods_in_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Goods In'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS k
    ON p.part = k.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Harrods_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Harrods_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Harrods'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS l
    ON p.part = l.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Inspection_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Inspection_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Inspection'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS m
    ON p.part = m.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Liberty_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Liberty_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Liberty'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS n
    ON p.part = n.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Repair_Store_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Repair_Store_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Repair Store'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS o
    ON p.part = o.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Return_from_Supplier_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Return_from_Supplier_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Return from Supplier'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS q
    ON p.part = q.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Selfridges_Trafford_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Selfridges_Trafford_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Selfidges Trafford'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS r
    ON p.part = r.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Selfridges_Oxford_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Selfridges_Oxford_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Selfridges Oxford'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS u
    ON p.part = u.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS Supplier_Returns_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS Supplier_Returns_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'Supplier Returns'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS w
    ON p.part = w.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS UK_Press_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS UK_Press_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'UK Press'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS x
    ON p.part = x.Part
    LEFT JOIN (
               SELECT
                dbo.part.part AS Part
               ,SUM(dbo.part_bins.qty) AS US_Press_Total_Stock
               ,dbo.stor.descr AS Stor
               ,dbo.part_bins.allocated_qty AS US_Press_Allocated
               FROM
                dbo.part
                INNER JOIN dbo.part_bins
                ON dbo.part.part = dbo.part_bins.part
                INNER JOIN dbo.stor
                ON dbo.part_bins.store = dbo.stor.store
                   AND dbo.stor.descr = 'US Press'
               GROUP BY
                dbo.part.part
               ,dbo.stor.descr
               ,dbo.part_bins.allocated_qty
              ) AS y
    ON p.part = y.Part
GROUP BY
    p.identifier
,   p.part
,   p.descr
,   supl.full_name
,   pgrp.descr
,   fam.descr
,   pp.qty
,   pt.part_cost
,   pp.allocated_qty
,   p.status
,   p.obs_code
,   t.Main_Store_Total_Stock
,   t.Main_Store_Allocated
,   f.Assay_Office_Total_Stock
,   f.Assay_Office_Allocated
,   g.Consigment_Stock_Total_Stock
,   g.Consigment_Stock_Allocated
,   h.Customer_Returns_Total_Stock
,   h.Customer_Returns_Allocated
,   j.Despatch_Total_Stock
,   j.Despatch_Allocated
,   k.Goods_in_Total_Stock
,   k.Goods_in_Allocated
,   l.Harrods_Total_Stock
,   l.Harrods_Allocated
,   m.Inspection_Total_Stock
,   m.Inspection_Allocated
,   n.Liberty_Total_Stock
,   n.Liberty_Allocated
,   o.Repair_Store_Total_Stock
,   o.Repair_Store_Allocated
,   q.Return_from_Supplier_Total_Stock
,   q.Return_from_Supplier_Allocated
,   r.Selfridges_Trafford_Total_Stock
,   r.Selfridges_Trafford_Allocated
,   u.Selfridges_Oxford_Total_Stock
,   u.Selfridges_Oxford_Allocated
,   w.Supplier_Returns_Total_Stock
,   w.Supplier_Returns_Allocated
,   x.UK_Press_Total_Stock
,   x.UK_Press_Allocated
,   y.US_Press_Total_Stock
,   y.US_Press_Allocated;    

我找到了解决办法。基本上,我得到重复的原因是因为返回来自不同的位置(stores-bin),所以我所做的是正确地关联stores和bins,以消除重复并获得正确的合计,代码现在运行得很好。再次,我为这张票给您带来的不便表示歉意。

您真的希望我们通过这么多代码吗?嗨,拉马克,非常感谢您的帮助。这是高级SQL编程,所以我希望在网络上找到一些专家,如果可能的话?对于由此给您带来的任何不便,我深表歉意…非常感谢:-@user3005677问题不在于是否有上师(我认为拉马克符合条件)。这是因为您正在转储大量代码,并要求我们为您完成工作。请从
part
开始选择。每次向查询中添加一个表,然后运行该查询,直到到达导致重复的
连接。没有一个理智的人会经历所有那些格式糟糕得可怕的代码。在最后的某个地方,你有1对2和1对0。我猜您需要对这些列进行某种聚合(求和)。我认为这是回报
29620RMGR50 D29620SZ5   Morganite Tearoom Ring Rose Size UK J/US 5  Thien Po    Fine / Fao  Astley Clarke   299.6700    1.0000  NULL    1450.000000 2250.000000 20  0   0   14 carat rose gold morganite and diamond ring   NULL    NULL    NULL    NULL    NULL    NULL    2.0000  0.0000  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.0000  1.0000  NULL    NULL    0.0000  0.0000  NULL    NULL    NULL    NULL    NULL    NULL

29620RMGR50 D29620SZ5   Morganite Tearoom Ring Rose Size UK J/US 5  Thien Po    Fine / Fao  Astley Clarke   299.6700    1.0000  NULL    1450.000000 2250.000000 20  0   0   14 carat rose gold morganite and diamond ring   NULL    NULL    NULL    NULL    NULL    NULL    2.0000  0.0000  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    2.0000  0.0000  NULL    NULL    0.0000  0.0000  NULL    NULL    NULL    NULL    NULL    NULL