簡體   English   中英

SQL:如何使用聯合按列過濾

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

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