2017-08-05 26 views
0

我想加入兩個表格(VW_ATP_DOWNLOAD_NOREQCAT和VW_MM_SALES_GRID),這兩個表格必須有共同的列1.Material 2.Size_Literal我只想要表格#2(VW_MM_SALES_GRID)中的material和size_literal - VW_MM_SALES GRID其中我加入到了下面的列:在加入查詢時獲得重複結果

材料, Technical_index, Size_literal, active_flag, size_conversion, record_date_time, nrf_sizecode, technical_index_2digits

我希望產生的是所有'A'字段,最重要的是來自'm'的尺寸字段,因爲M包含所有尺寸,其中A只包含具有現有值的尺寸 - 我希望看到所有如果'A'表中沒有值,則返回null。如果我只是運行用此材料的表,我得到的結果:

尺寸L = 45 大小M = 51

我知道有一個大小S,我需要看到的是空,所以我可以轉換成一個零值,但當我運行下面的查詢時,它只是重複所有大小的值45和51 ....有點損失。謝謝。

查詢:

SELECT A.MATERIAL, 
     M.SIZE_LITERAL, 
     AVAIL_DATE, 
     A.AVAIL_QTY, 
     A.STOCK_CATEGORY 

FROM VW_ATP_DOWNLOAD_NOREQCAT A LEFT OUTER JOIN VW_MM_SALES_GRID M ON A.MATERIAL = M.MATERIAL 

WHERE M.MATERIAL = 'AA2721' 

AND A.STOCK_CATEGORY IN ('A60381000','A60382000') 

AND A.AVAIL_DATE BETWEEN GETDATE() AND GETDATE() + 90 

AND A.MATERIAL = 'AA2721' 

AND M.ACTIVE_FLAG IS NOT NULL 

GROUP BY A.MATERIAL, 
     M.SIZE_LITERAL, 
     AVAIL_DATE, 
     A.AVAIL_QTY, 
     A.STOCK_CATEGORY 

我的結果:

AA2721大號2017年8月26日00:00:00.000 45 A60382000
AA2721大號2017年8月26日00:00:00.000 51 A60382000
AA2721中號2017年8月26日00:00:00.000 45 A60382000
AA2721中號2017年8月26日00:00:00.000 51 A60382000
AA2721小號2017年8月26日00:00:00.000 45 A60382000
AA2721小號2017年8月26日00:00:00.000 51 A60382000

當我只用 'A' 表運行:

SELECT A.MATERIAL, 
     A.SIZE_LITERAL, 
     A.DATEPART(mm,AVAIL_DATE) AS 'MONTH', 
     A.AVAIL_QTY, 
     A.STOCK_CATEGORY 

FROM VW_ATP_DOWNLOAD_NOREQCAT A LEFT OUTER JOIN VW_MM_SALES_GRID M ON A.MATERIAL = M.MATERIAL 

WHERE M.MATERIAL IN ('AA2721') 

AND A.STOCK_CATEGORY IN ('A60381000','A60382000') 

AND A.AVAIL_DATE BETWEEN GETDATE() AND GETDATE() + 90 

AND A.MATERIAL ='AA2721' 

我得到:

AA2721    L 8 45 A60382000  
AA2721    M 8 51 A60382000  

當我運行加入我得到:

AA2721    L 2017-08-26 00:00:00.000 45 A60382000  
AA2721    L 2017-08-26 00:00:00.000 51 A60382000  
AA2721    M 2017-08-26 00:00:00.000 45 A60382000  
AA2721    M 2017-08-26 00:00:00.000 51 A60382000  
AA2721    S 2017-08-26 00:00:00.000 45 A60382000  
AA2721    S 2017-08-26 00:00:00.000 51 A60382000 

大應該有45和中等應該有52,小,這是一個有效的si ze應該爲null,因爲它不在連接表中....不知道我做錯了什麼。謝謝! M表中的

結果瓦特/只材料中的問題:

MATERIAL   TECHNICAL_INDEX SIZE_LITERAL ACTIVE_FLAG SIZE_CONVERSION_MATERIAL_ID RECORD_DATE_TIME  NRF_SIZECODE TECHNICAL_INDEX_2DIGITS 
------------------ --------------- ------------ ----------- --------------------------- ----------------------- ------------ ----------------------- 
AA2721    480    2XS   NULL  KC       2017-07-29 06:16:40.000 20900  21 
AA2721    500    XS   NULL  KC       2017-07-29 06:16:40.000 20901  23 
AA2721    520    S   X   KC       2017-07-29 06:16:40.000 20902  25 
AA2721    540    M   X   KC       2017-07-29 06:16:40.000 20903  27 
AA2721    560    L   X   KC       2017-07-29 06:16:40.000 20904  29 
+0

剛剛添加 - 連接的查詢上的IS NOT NULL是因爲大小網格具有「無效大小」,所以我需要將它們過濾掉。 – user3496218

+0

它會很清楚地看到M表數據也..但我認爲你應該添加A.size_literal = M。size_literal加入條件 – Wonjin

+0

我會嘗試大小加入 – user3496218

回答

0

我認爲M表中應該是透視表。我移動了一些條件來加入條件。

你可以試試嗎?

SELECT A.MATERIAL, 
     M.SIZE_LITERAL, 
     A.AVAIL_DATE, 
     A.AVAIL_QTY, 
     A.STOCK_CATEGORY 
FROM VW_MM_SALES_GRID M LEFT OUTER JOIN VW_ATP_DOWNLOAD_NOREQCAT A 
    ON A.MATERIAL = M.MATERIAL 
    AND A.SIZE_LITERAL = M.SIZE_LITERAL 
    AND A.STOCK_CATEGORY IN ('A60381000','A60382000') 
    AND A.AVAIL_DATE BETWEEN GETDATE() AND GETDATE() + 90 

WHERE M.MATERIAL = 'AA2721' AND M.ACTIVE_FLAG IS NOT NULL 

GROUP BY A.MATERIAL, 
     M.SIZE_LITERAL, 
     AVAIL_DATE, 
     A.AVAIL_QTY, 
     A.STOCK_CATEGORY 
+0

那就成功了 - 謝謝!數據透視表非常有意義。好奇爲什麼移動WHERE條件的聯合有所作爲?欣賞它。 – user3496218