我有两个数据库。一个用于Navision,另一个用于WMS。我需要获得成品/计划物品的百分比。问题是这些DB没有密钥。我正在尝试使用相同的值列连接数据库表(例如:Prod_ Order_No (PK, varchar(20), not null)
和production_order_no(varchar(255,null)
。
无论如何,我只从一个DB获得了值。第二个DB值几乎总是NULL
。
但事实并非如此......
有我的SQL查询代码:
SELECT i.[code], i.[description],
p.[quantity],
uom.code [uom],
uom.[quantity_per_base_unit_of_measure] [uom_qty],
p.[quantity]*uom.[quantity_per_base_unit_of_measure] total,
wc.code,
pol."Finished Qty_ (Base)",
p.[date_created]
FROM [TWMS].[dbo].[package] p
LEFT JOIN [TWMS].[dbo].[item] i ON p.[item_id] = i.id
LEFT JOIN [TWMS].[dbo].[item_unit_of_measure] uom ON p.[uom_id] = uom.id
LEFT JOIN [TWMS].[dbo].[work_center] wc on p.[work_center_id] = wc.id
FULL JOIN [Artilux].[dbo].[Trivilita UAB$Prod_ Order Line] pol on p.[id] = pol.[Line No_]
WHERE p.[date_created] >= '2015-07-31'
AND p.[date_created] <= '2015-08-01'
AND wc.[code] = 'SF01'
AND wc.[code] not like '%/%'
ORDER BY p.[date_created]
这就是我得到的:
SOF01004/1 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:00:03.863
SOF01004/1 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:00:48.673
SOF01004/1 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:05:08.070
SOF01004/3 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:09:11.440
SOF01004/3 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:09:14.653
SOF01004/1 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:24:13.927
SOF01004/2 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:24:17.810
SOF01004/2 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:24:20.890
SOF01004/2 SOFA HAVANA OC+H+2,5+D (left)Joise Beige/Brown 1.00 VNT 1.00 1.0000 SF01 NULL 2015-07-31 06:24:24.093
1问题。八列不应该是NULL ..也许我的连接错了?
2问题。第一列是商品代码,但SOF01004 / 1和SOF01004 / 3等是三件中的1件商品。所以我需要丢弃所有/ 1,/ 2,/ 3并且只获得SOF01004 +数量之和(其中FULL SOF01004项目等于MIN部分。类似于:sum(SOF01004/1) = 3
,sum(SOF01004/2) = 2
,sum(SOF01004/3) = 10
,因此SOF01004项目的数量应为2.因为有两件来自theese的完整项目。
3问题。我需要获得SUM(pol."(Finished Qty (Base)") / SUM(p.[quantity])) * 100
的百分比,但问题是一列是来自一个DB而第二列是来自其他...:/
请向我提供更多信息。我会编辑我的帖子。和我的坏英语课程很抱歉。
答案 0 :(得分:0)
对于问题2:
如果某件商品的数量(例如SOF01004 / 1)为0,那么包装中是否还有一行还是可以完全丢失?
如果它总是存在,我会做这样的事情:
select
case when POS > 0 then left(code, POS-1) else code end as code,
description,
min(quantity)
from (
SELECT
i.code,
patindex('%/[0-9]', i.code) as POS,
i.description,
sum(p.quantity),
...
group by i.code, i.description ...
) X
group by
case when POS > 0 then left(code, POS-1) else code end as code,
description,
....
这里patindex假设结尾总是/ + 1个数字。如果它可以是更多数字,添加更多patindex字段可能是最佳选择。如果代码本身没有/,使用charindex也可以。
如果数据库中的行完全丢失,应该被视为零,那么我会创建一个如下所示的表:
SOF01004/1 SOF01004
SOF01004/2 SOF01004
SOF01004/3 SOF01004
然后你可以使用这个表来获取和外部连接包表来获得更短的代码,并使用isnull(数量,0)来获取缺失的数量。