[英]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 INTO
或SELECT 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.