T-Sql
當第二個表將返回更多行時如何連接 2 個表?
我試圖加入 2 個有條件的表 - 如果它匹配,我期望從另一個表中獲得所有結果。
目前不起作用的查詢:
SELECT (CASE WHEN ZL.NumerCzesci LIKE '%ZŁOŻENIE%' THEN (SELECT NumerCzesci FROM PodZlozenie WHERE NumerPodZlozenia = ZL.NumerCzesci) ELSE ZL.NumerCzesci END) AS [NumerCzesci] FROM Zlozenie ZL LEFT JOIN PodZlozenie PD ON ZL.NumerZlozenia = PD.NumerPodZlozenia
桌子
$$ Zlozenie $$好像 :
CREATE TABLE [dbo].[Zlozenie] ( [Id_Zlozenia] INT IDENTITY (1, 1) NOT NULL, [NumerZlozenia] VARCHAR (50) NOT NULL, [NumerCzesci] VARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([Id_Zlozenia] ASC) ); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-001-000-ROTOR-3-1-3','300-000-001 - WKŁADKA GÓRNA'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-001-000-ROTOR-3-1-3','300-000-002 - WKŁADKA DOLNA'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-001-000-ROTOR-3-1-3','300-000-003 - UCHO ROTORA 11 RAM 3 SEKCJE'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-001-000-ROTOR-3-1-3','300-000-005 - RAMIĘ ROTORA 565mm'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-021-000 - DACH-BA3-1','300-021-001 - ZŁOŻENIE POKRYWY GÓRNEJ BA3-1'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-021-000 - DACH-BA3-1','300-021-002 - ZŁOŻENIE POKRYWY DOLNEJ TYŁ BA3-1'); INSERT INTO Zlozenie (NumerZlozenia, NumerCzesci) VALUES ('300-021-000 - DACH-BA3-1','300-021-003 - ZŁOŻENIE POKRYWY DOLNEJ PRZÓD BA3-1');
桌子
$$ PodZlozenie $$好像 :
CREATE TABLE [dbo].[PodZlozenie] ( [Id_PD] INT IDENTITY (1, 1) NOT NULL, [NumerPodZlozenia] VARCHAR (50) NOT NULL, [NumerCzesci] VARCHAR (50) NOT NULL ); INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-001 - ZŁOŻENIE POKRYWY GÓRNEJ BA3-1','300-020-001 - BOK POKRYWY GÓRNEJ') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-001 - ZŁOŻENIE POKRYWY GÓRNEJ BA3-1','300-020-002 - DEKIEL POKRYWY GÓRNEJ') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-001 - ZŁOŻENIE POKRYWY GÓRNEJ BA3-1','300-020-003 - KĄTOWNIK') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-001 - ZŁOŻENIE POKRYWY GÓRNEJ BA3-1','300-020-004 - WSTAWKA UZUPEŁNIAJĄCA') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-002 - ZŁOŻENIE POKRYWY DOLNEJ TYŁ BA3-1','300-020-010 - BLASZKA PROWADZĄCA POKRYWĘ') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-002 - ZŁOŻENIE POKRYWY DOLNEJ TYŁ BA3-1','300-020-011 - POKRYWA DOLNA TYŁ BA3-1') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-002 - ZŁOŻENIE POKRYWY DOLNEJ TYŁ BA3-1','300-020-012 - PŁASKOWNIK BA3-1') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-003 - ZŁOŻENIE POKRYWY DOLNEJ PRZÓD BA3-1','300-020-013 - WZMOCNIENIE POKRYWY') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-003 - ZŁOŻENIE POKRYWY DOLNEJ PRZÓD BA3-1','300-020-014 - UCHWYT') INSERT INTO PodZlozenie (NumerPodZlozenia, NumerCzesci) VALUES ('300-021-003 - ZŁOŻENIE POKRYWY DOLNEJ PRZÓD BA3-1','300-020-015 - POKRYWA DOLNA PRZÓD BA3-1')
#EDIT 查詢應返回所需的輸出,如下所示:
IF Zlozenie.NumerCzesci CONTAINS "ZŁOŻENIE" THEN SELECT PodZlozenie.NumerCzesci FROM PodZlozenie WHERE Zlozenie.NumerCzesci = PodZlozenie.NumerPodZlozenia ELSE Zlozenie.NumerCzesci
期望的輸出:
[NumerCzesci] 300-000-001 - WKŁADKA GÓRNA 300-000-002 - WKŁADKA DOLNA 300-000-003 - UCHO ROTORA 11 RAM 3 SEKCJE 300-000-005 - RAMIĘ ROTORA 565mm 300-020-001 - BOK POKRYWY GÓRNEJ 300-020-002 - DEKIEL POKRYWY GÓRNEJ 300-020-003 - KĄTOWNIK 300-020-004 - WSTAWKA UZUPEŁNIAJĄCA 300-020-010 - BLASZKA PROWADZĄCA POKRYWĘ 300-020-011 - POKRYWA DOLNA TYŁ BA3-1 300-020-012 - PŁASKOWNIK BA3-1 300-020-013 - WZMOCNIENIE POKRYWY 300-020-014 - UCHWYT 300-020-015 - POKRYWA DOLNA PRZÓD BA3-1
因此,如果我正確理解您的範例,您似乎想要
NumerCzesci
兩個表中的唯一值列表,除非Zlozenie.NumerCzesci
包含“ZŁOŻENIE”。然後你想PodZlozenie.NumerCzesci
改用。您應該能夠使用一個FULL JOIN
和一個DISTINCT
子句來實現這一點,如下所示:SELECT DISTINCT CASE WHEN Zlozenie.NumerCzesci LIKE '%ZŁOŻENIE%' OR Zlozenie.NumerCzesci IS NULL THEN PodZlozenie.NumerCzesci ELSE Zlozenie.NumerCzesci END AS NumerCzesci FROM Zlozenie FULL JOIN PodZlozenie ON Zlozenie.NumerCzesci = PodZlozenie.NumerPodZlozenia
(如果您希望結果按升序排序,您可以選擇添加
ORDER BY NumerCzesci
到上述查詢的末尾NumerCzesci
。)