[英]SQL: How to filter by column with a Union
我是SQl的新手,所以我不確定如何為Google搜索構建問題。基本上,我正在嘗試將兩組列合並。 他們有非常相似的信息。 集A是一系列產品,其中帶有供賣方使用的列。 B組是沒有供應商的一系列產品。
我想要做的是過濾器集合A,這樣僅顯示特定供應商的產品(這是我對WHERE子句所做的事情)。 但是,然后,我想組合集合A和集合B,以便集合B中的值將僅顯示(並合並)該產品在集合A中存在條目的位置。
也就是說,為了更好地解釋,我希望集合B“查看”集合A。它將看到集合A僅包含某個供應商提供的商品,然后集合B將刪除集合A所沒有的商品(不是從該供應商處)。
有什么想法嗎? 謝謝,
代碼如下:
SELECT ([Transfer_From]
,'Transfer_To' = [WAREHOUSE_CODE]
,'Product_Number' = [PRODUCT_NUMBER]
,'QTY_Trans' = [quantity_received]
,'Transfer_Date' = [received_date]
FROM [fstrkdb_1].[dbo].[Inventry]
WHERE vendor_number = '1074'
UNION
SELECT [Transfer_From]
,[Transfer_To]
,[Product_Number]
,'QTY_Trans' =[Quantity_Allocated]
,[Transfer_Date]
FROM [fstrkdb_1].[dbo].[InvtransFromWhs]
ORDER BY Transfer_Date
GO
一種方法是在WHERE
子句中使用EXISTS
。 CTE有助於避免重復第一個查詢:
WITH a as (
SELECT Transfer_From, WAREHOUSE_CODE as Transfer_To, Product_Number,
quantity_received as QTY_Trans, received_date as Transfer_Date
FROM [fstrkdb_1].[dbo].[Inventry]
WHERE vendor_number = '1074'
)
SELECT a.*
FROM a
UNION ALL
SELECT Transfer_From, Transfer_To, Product_Number, Quantity_Allocated
Transfer_Date
FROM [fstrkdb_1].[dbo].InvtransFromWhs ifw
WHERE EXISTS (SELECT 1 FROM a WHERE a.Product_Number = ifw.Product_Number)
ORDER BY Transfer_Date;
僅在期望重復時才需要UNION
。 查詢不應創建意外的重復項。
WITH DataSet1 as (
SELECT ([Transfer_From]
,'Transfer_To' = [WAREHOUSE_CODE]
,'Product_Number' = [PRODUCT_NUMBER]
,'QTY_Trans' = [quantity_received]
,'Transfer_Date' = [received_date]
FROM [fstrkdb_1].[dbo].[Inventry]
WHERE vendor_number = '1074'),
DataSet2 as (
SELECT [Transfer_From]
,[Transfer_To]
,[Product_Number]
,'QTY_Trans' =[Quantity_Allocated]
,[Transfer_Date]
FROM [fstrkdb_1].[dbo].[InvtransFromWhs] A
INNER JOIN dataset1 B
on A.Product_number = B.Product_number)
SELECT * FROM dataset1
UNION
SELECT * FROM dataset2
ORDER BY Transfer_Date
這將生成Generate1。 然后將數據集1的乘積用作數據集2的過濾器,然后將這兩個集合合並在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.