【问题标题】:SQL - Derived column from separate tablesSQL - 来自单独表的派生列
【发布时间】:2022-11-16 20:04:52
【问题描述】:

我有两个单独的 CTE 表,其中包含具有完整连接的股票数据。 虽然这可以显示两个表中的所有记录,但我需要找到一种方法来提供单个 LOCATION 和 SKU 列,该列组合了每个表中的 sku 和位置列。

当前输出如下所示:

所需的输出将是这样的:

这是当前代码:

WITH WMSQty AS 

(SELECT * FROM (

SELECT [Date], Warehouse, Location, Sku,

SUM (CASE 

WHEN Warehouse = 'SYNCUK' AND [Location] = 'SYNCUK' THEN QtyOnHand
WHEN Warehouse = 'SYNCUK' AND [Location] = 'SYUKSC' THEN QtyOnHand
WHEN Warehouse = 'SYNCUK' AND [Location] = 'SYNCRE' THEN QtyOnHand
WHEN Warehouse = 'SYNCNL' AND [Location] = 'SYNCNL' THEN QtyOnHand
WHEN Warehouse = 'SYNCNL' AND [Location] = 'SYNLSC' THEN QtyOnHand
WHEN Warehouse = 'SYNCNL' AND [Location] = 'SYNLRE' THEN QtyOnHand
WHEN Warehouse = 'SYNCAM' AND [Location] = 'SYNCAM' THEN QtyOnHand
WHEN Warehouse = 'SYNCAM' AND [Location] = 'SYAMSC' THEN QtyOnHand
WHEN Warehouse = 'SYNCAM' AND [Location] = 'SYAMRE' THEN QtyOnHand
WHEN Warehouse = 'SYNCAM' AND [Location] = 'SYAMAZ' THEN QtyOnHand
WHEN Warehouse = 'SHPWIR' AND [Location] = 'SHPWIR' THEN QtyOnHand
WHEN Warehouse = 'SHPWIR' AND [Location] = 'SHPWRD' THEN QtyOnHand
ELSE 0
END) AS QtyOnHand,

RANK() OVER (PARTITION BY Warehouse ORDER BY [DATE] DESC) date_rank

FROM [ReportTestCA].[dbo].[DimWMSData]
GROUP BY [Date],warehouse,Location,Sku) t

WHERE date_rank = 1),

SAGE AS

(SELECT 

AUDTORG, [DATE], ITEMNO, LOCATION, QTYONHAND, LASTCOST

FROM DimSageLocationData
WHERE DimSageLocationData.[DATE] = (SELECT MAX(DimSageLocationData.[DATE]) FROM 
DimSageLocationData WHERE DimSageLocationData.[DATE] < GETDATE())
)

SELECT

SAGE.AUDTORG,
SAGE.[DATE] AS [SAGE DATE],
WMSQty.[Date] AS [WMS DATE],
SAGE.ITEMNO AS [SAGE SKU],
SAGE.LOCATION AS [SAGE LOCATION],
SAGE.QTYONHAND AS [SAGE QTY],
SAGE.LASTCOST AS [SAGE LASTCOST],
WMSQty.Warehouse AS [WMS WAREHOUSE],
WMSQty.Sku AS [WMS SKU],
WMSQty.Location AS [WMS LOCATION],
WMSQty.QtyOnHand AS [WMS QTY],
SAGE.QTYONHAND - WMSQty.QtyOnHand AS [UNIT VARIANCE]

FROM 

SAGE FULL JOIN
WMSQty ON WMSQty.Location = SAGE.Location AND SAGE.ITEMNO = WMSQty.Sku

WHERE (SAGE.ITEMNO = 'T21-8633' OR WMSQty.Sku = 'T21-8633')

ORDER BY SAGE.LOCATION, SAGE.ITEMNO, WMSQty.Location, WMSQty.Sku ASC

我真的不确定如何实现这一目标。 我认为一个选择可能是创建第三个表,其中包含每个可能的位置和 sku 组合并加入其中。然而,这将是一个至少有 200 万行的巨大表,并且维护起来很麻烦。 非常感谢任何关于如何进行的想法

【问题讨论】:

    标签: sql join derived-table


    【解决方案1】:

    案例在这种情况下行不通吗?

    就像是

    选择当 SAGE SKU 为空时的情况然后 WMS SKU 否则 SAGE SKU 结束为 存货单位

    那应该从多个源列中填充你的最后一列,基于哪个是或不是空的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多