簡體   English   中英

如何使用包含參考值的第三個表將sql表拆分為兩個表

[英]How to split a sql table into two tables using a third table containing reference values

我是這里的新手,也是sql的新手,所以我希望我問的問題正確。

表內部產品EAN

EAN/UPC 
1234567789 
2233445566

餐桌店銷售

EAN/UPC    | product | sales value |
1234567789 | xyz     | 200         |
2233445566 | abc     | 100         |
9685444444 | yyy     | 150         |

結果應如下所示:

表我公司的銷售額

EAN/UPC    | product | sales value |
1234567789 | xyz     | 200         |
2233445566 | abc     | 100         |

列出我的競爭對手的銷售額

EAN/UPC    | product | sales value |
9685444444 | yyy     | 150         |

我有所有可用的EAN / UPC代碼(大約100.000),我從商店收到銷售數據,包括需要與我分開的競爭對手的EAN / UPC代碼。 我想使用第一個表作為參考,如果將EAN / UPC匹配的值移動到我公司銷售的表中,而其他沒有EAN / UPC匹配的值移動到我的競爭對手銷售表中。

我正在考慮在EAN / UPC T1不是EAN / UPC T2的情況下使用select into語句。

非常感謝您的幫助。

Select * 
into CompanySales
from ShopSales
where [EAN/UPC] in (select [EAN/UPC] from productEAN);

Select * 
into CompetitorSales
from ShopSales
where [EAN/UPC] not in (select [EAN/UPC] from productEAN);

這應該解決:

使用CTE進行設置(出於測試目的):

WITH [shop sales] ([EAN/UPC], [product], [sales value]) AS (
    SELECT * FROM (
        VALUES
            (1234567789,'xyz',200), 
            (2233445566,'abc',100), 
            (9685444444,'yyy',150)
    ) AS A (Column1, Column2, Column3)
),
[internal product EAN] ([EAN/UPC]) AS ( 
    SELECT * FROM (
        VALUES
            (1234567789), 
            (2233445566)
    ) AS A (Column1)
)

兩個查詢以獲取信息:

SELECT s.*
FROM [internal product EAN] ip
INNER JOIN [shop sales] s ON ip.[EAN/UPC] = s.[EAN/UPC]

SELECT s.*
FROM [shop sales] s
WHERE s.[EAN/UPC] NOT IN (SELECT [EAN/UPC] FROM [internal product EAN])

至於從數據創建表,對於新表的INSERT INTOSELECT INTO可能就足夠了。

嘗試這樣的事情:

INSERT INTO OnlyMyProductSales([EAN],[product],SalesValue)
SELECT s.*
FROM [MyProduct] p
INNER JOIN [AllSales] s 
    ON p.[EAN] = s.[EAN]

INSERT INTO MyCompetitionSales([EAN],[product],SalesValue)
SELECT s.*
FROM  [AllSales] s
    LEFT JOIN [MyProduct] p 
        ON p.[EAN] = s.[EAN]
WHERE s.[EAN] IS NULL

這將有助於:

CREATE TABLE #internalproductEAN (EAN_UPC  VARCHAR(50))

INSERT INTO #internalproductEAN
SELECT 1234567789 UNION ALL 
SELECT 2233445566


CREATE TABLE #shopsales (EAN_UPC  VARCHAR(50),product VARCHAR(10),SalesValue BIGINT)
INSERT INTO #shopsales
SELECT '1234567789','xyz',200  UNION ALL
SELECT '2233445566','abc',100  UNION ALL
SELECT '9685444444','yyy',150 

CREATE TABLE #companysales (EAN_UPC  VARCHAR(50),product VARCHAR(10),SalesValue BIGINT)


INSERT INTO #companysales
SELECT ss.* FROM #shopsales ss
INNER JOIN #internalproductEAN ip ON ss.EAN_UPC=ip.EAN_UPC

SELECT * FROM #companysales

CREATE TABLE #competitorsales (EAN_UPC  VARCHAR(50),product VARCHAR(10),SalesValue BIGINT)

INSERT INTO #competitorsales
SELECT ss.* FROM #shopsales ss
LEFT JOIN #internalproductEAN ip ON ss.EAN_UPC=ip.EAN_UPC
WHERE ip.EAN_UPC IS NULL

SELECT * FROM #competitorsales


--SELECT * FROM #internalproductEAN
--SELECT * FROM #shopsales

DROP TABLE #internalproductEAN
DROP TABLE #shopsales
DROP TABLE #companysales
DROP TABLE #competitorsales

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM