首页 > 解决方案 > SQL Server 从两个表中获取多行数据

问题描述

所以这是我正在使用的两张表

库存项目:

ItemID               SKU                           MSKU
-------------------- ------------------------------ -------------------------
36414                SWR0060                        
14859140             4220.12.010                    220.12.010
14860211             6220.12.010                    220.12.010
47717413             6000.22.010                    6000.22.XXX
102244764            SWR-SPIGOT                     SWR-SPIGOTS
115377648            SWR-SPIGOTBLA                  SWR-SPIGOTS
115381142            SWR-SPIGOTCOP                  SWR-SPIGOTS
116112478            6000.22.030                    6000.22.XXX
116112701            6000.22.050                    6000.22.XXX
119263276            SWR-SPIGOTAG                   SWR-SPIGOTS

库存项目备注:

ItemID               MemoText
-------------------- ----------------------------------------
36414                Title:Professional C7 Steel Wire Rope Cutters (0.5mm - 4mm) Snips Fence Tool
14859140             Title:Stainless Steel Base Plate for 42.4mm Balustrade Handrail Railing Component
47717413             Title:52mm Stainless Glass Adapter (10-20mm) - Metric and Wood Thread Balustrade Handrail
102244764            Title:Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp

目前,当我运行下面的查询时,会显示标题直接连接到它们的主要项目的标题,但通过 MSKU 字段连接到这些项目的项目显示 NULL

DECLARE @title as VARCHAR(MAX) = 'Title:';

SELECT
ItemID,
Code as SKU, 
AnalysisCode12 as MSKU,
(SELECT TOP 1 MemoText FROM StockItemMemo WHERE StockItemMemo.ItemID = StockItem.ItemId and MemoText like @title+'%') as Title
From StockItem WHERE AnalysisCode7 = 'YES'
ItemID               SKU                            MSKU                                                         Title
-------------------- ------------------------------ ------------------------------------------------------------ ----------------------------------------------
36414                SWR0060                                                                                     Professional C7 Steel Wire Rope Cutters (0.5mm - 4mm) Snips Fence Tool
14859140             4220.12.010                    220.12.010                                                   Stainless Steel Base Plate for 42.4mm Balustrade Handrail Railing Component
14860211             6220.12.010                    220.12.010                                                   NULL
47717413             6000.22.010                    6000.22.XXX                                                  52mm Stainless Glass Adapter (10-20mm) - Metric and Wood Thread Balustrade Handrail
102244764            SWR-SPIGOT                     SWR-SPIGOTS                                                  Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp
115377648            SWR-SPIGOTBLA                  SWR-SPIGOTS                                                  NULL
115381142            SWR-SPIGOTCOP                  SWR-SPIGOTS                                                  NULL
116112478            6000.22.030                    6000.22.XXX                                                  NULL
116112701            6000.22.050                    6000.22.XXX                                                  NULL
119263276            SWR-SPIGOTAG                   SWR-SPIGOTS                                                  NULL

我也需要主 SKU 的标题来显示所有具有匹配 MSKU 的项目,所以下面是我想要的结果:

ItemID               SKU                            MSKU                                                         Title
-------------------- ------------------------------ ------------------------------------------------------------ ----------------------------------------------
36414                SWR0060                                                                                     Professional C7 Steel Wire Rope Cutters (0.5mm - 4mm) Snips Fence Tool
14859140             4220.12.010                    220.12.010                                                   Stainless Steel Base Plate for 42.4mm Balustrade Handrail Railing Component
14860211             6220.12.010                    220.12.010                                                   Stainless Steel Base Plate for 42.4mm Balustrade Handrail Railing Component
47717413             6000.22.010                    6000.22.XXX                                                  52mm Stainless Glass Adapter (10-20mm) - Metric and Wood Thread Balustrade Handrail
102244764            SWR-SPIGOT                     SWR-SPIGOTS                                                  Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp
115377648            SWR-SPIGOTBLA                  SWR-SPIGOTS                                                  Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp
115381142            SWR-SPIGOTCOP                  SWR-SPIGOTS                                                  Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp
116112478            6000.22.030                    6000.22.XXX                                                  52mm Stainless Glass Adapter (10-20mm) - Metric and Wood Thread Balustrade Handrail
116112701            6000.22.050                    6000.22.XXX                                                  52mm Stainless Glass Adapter (10-20mm) - Metric and Wood Thread Balustrade Handrail
119263276            SWR-SPIGOTAG                   SWR-SPIGOTS                                                  Stainless Steel Spigot 10-12mm Glass Handrail Balustrade Railing Balcony Clamp

这样做的最佳方法是什么?

标签: sqlsql-servertsql

解决方案


我相信您可以使用如下查询来实现所需的输出

DECLARE @title as VARCHAR(MAX) = 'Title:';



; WITH CTE AS 
(
SELECT 
    AnalysisCode12 as MSKU,
    MemoText as Title
FROM StockItemMemo SIM
  JOIN StockItem SI
    ON SIM.ItemID = SI.ItemId
WHERE MemoText like @title+'%'
)

SELECT
  ItemID,
  Code as SKU, 
  AnalysisCode12 as MSKU,
  C.Title
From StockItem SI
  LEFT JOIN CTE C 
    ON C.MSKU=SI.AnalysisCode12
WHERE AnalysisCode7 = 'YES'

推荐阅读