Союз и право объединяться не работает из-за пропавших материалов - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть одна таблица основного договора, в которой есть такие столбцы, как (VPA_ID, PRODUCT_ID, MATERIAL_NUMBER, QUANTITY). Каждый идентификатор продукта имеет номера материалов 1: n, и вы можете видеть, что у нас есть 3 номера материалов с количеством в таблице. Проблема в том, что в этой таблице есть некоторые пропущенные номера материалов, вы можете сказать, что эти номера материалов не отображаются в нашей таблице фактов. В нашей основной записи материала этот идентификатор продукта c имеет 8 номеров материалов, 5 из которых отсутствуют в основной таблице контракта. Эти отсутствующие номера материалов не имеют сумм.

Мое требование состоит в том, чтобы я хотел внести отсутствующие номера материалов в таблицу основного договора. Я пробовал объединение и правое объединение, но оно не работает.

Таблица основного контракта:

select FVPO_VPA_ID as vpa_id, FVPO_price_product_id as product_id, FVPO_material_number as material_number
     , sum(FVPO_Quantity) as quantity                       
from   OP_FCT_SDDB_VPA_POSITION
where  FVPO_price_product_id = 'PR000349059'
and    FVPO_VPA_ID = '17270'                        
group by FVPO_VPA_ID, FVPO_price_product_id, FVPO_material_number                       

enter image description here

Основной материал:

select DSAI_ID, DSAI_PRPR_SAP_MATNR, DSAI_SP_SAP_MATNR          
from   OP_DIM_SALES_ITEM
where  DSAI_PRPR_SAP_MATNR = 'PR000349059'
and    dsai_subito_transfer_flag = 'Y'

enter image description here

Ожидаемый результат:

+--------------+----------+------------------------+------------------------+------------+
| FVPO_VPA_ID  |  DSAI_ID |  FVPO_price_product_id |  FVPO_material_number  |  QUANTITY  |
+--------------+----------+------------------------+------------------------+------------+
|        17270 |    40106 |  PR000349059           |  SP000748370           |   5565604  |
|        17270 |    40109 |  PR000349059           |  SP000748364           |   1962898  |
|        17270 |    40108 |  PR000349059           |  SP000748366           |   2589732  |
|              |    11670 |  PR000349059           |  SP000010709           |            |
|              |    40096 |  PR000349059           |  SP000748362           |            |
|              |    40099 |  PR000349059           |  SP000748132           |            |
|              |    40100 |  PR000349059           |  SP000748130           |            |
|              |    40101 |  PR000349059           |  SP000748128           |            |
+--------------+----------+------------------------+------------------------+------------+

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Здравствуйте, эксперты, это пример вывода, желтая часть - это текущий вывод, а остальные - это то, что я хочу добавить из измерения материала, в котором отсутствуют материалы. Для этих материалов нет количества и идентификатора vpa: введите описание изображения здесь

0 голосов
/ 10 апреля 2020
CREATE TABLE OP_FCT_SDDB_VPA_POSITION(
   FVPO_VPA_ID           VARCHAR(12)  NOT NULL 
  ,DSAI_ID               INTEGER  NOT NULL
  ,FVPO_price_product_id VARCHAR(12) NOT NULL
  ,FVPO_material_number  VARCHAR(12) NOT NULL
  ,FVPO_Quantity         INTEGER 
);
INSERT INTO OP_FCT_SDDB_VPA_POSITION(FVPO_VPA_ID,DSAI_ID,FVPO_price_product_id,FVPO_material_number,FVPO_Quantity) VALUES ('17270',40106,'PR000349059','SP000748370',5565604);
INSERT INTO OP_FCT_SDDB_VPA_POSITION(FVPO_VPA_ID,DSAI_ID,FVPO_price_product_id,FVPO_material_number,FVPO_Quantity) VALUES ('17270',40109,'PR000349059','SP000748364',1962898);
INSERT INTO OP_FCT_SDDB_VPA_POSITION(FVPO_VPA_ID,DSAI_ID,FVPO_price_product_id,FVPO_material_number,FVPO_Quantity) VALUES ('17270',40108,'PR000349059','SP000748366',2589732);

GO
3 rows affected
select FVPO_VPA_ID , FVPO_price_product_id , FVPO_material_number 
     , sum(FVPO_Quantity) as FVPO_Quantity                       
from   OP_FCT_SDDB_VPA_POSITION
where  FVPO_price_product_id = 'PR000349059'
and    FVPO_VPA_ID = '17270'                        
group by FVPO_VPA_ID, FVPO_price_product_id, FVPO_material_number  
GO
FVPO_VPA_ID | FVPO_price_product_id | FVPO_material_number | FVPO_Quantity
:---------- | :-------------------- | :------------------- | ------------:
17270       | PR000349059           | SP000748364          |       1962898
17270       | PR000349059           | SP000748366          |       2589732
17270       | PR000349059           | SP000748370          |       5565604
CREATE TABLE OP_DIM_SALES_ITEM(
   DSAI_ID                   INTEGER  NOT NULL PRIMARY KEY 
  ,DSAI_PRPR_SAP_MATNR       VARCHAR(12) NOT NULL
  ,DSAI_SP_SAP_MATNR         VARCHAR(12) NOT NULL
  ,dsai_subito_transfer_flag VARCHAR(4) NOT NULL
);

INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40106,'PR000349059','SP000748370','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40109,'PR000349059','SP000748364','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40108,'PR000349059','SP000748366','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (11670,'PR000349059','SP000010709','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40096,'PR000349059','SP000748362','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40099,'PR000349059','SP000748132','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40100,'PR000349059','SP000748130','Y');
INSERT INTO OP_DIM_SALES_ITEM(DSAI_ID,DSAI_PRPR_SAP_MATNR,DSAI_SP_SAP_MATNR,dsai_subito_transfer_flag) VALUES (40101,'PR000349059','SP000748128','Y');

GO
8 rows affected
select DSAI_ID, DSAI_PRPR_SAP_MATNR, DSAI_SP_SAP_MATNR          
from   OP_DIM_SALES_ITEM
where  DSAI_PRPR_SAP_MATNR = 'PR000349059'
and    dsai_subito_transfer_flag = 'Y'
GO
DSAI_ID | DSAI_PRPR_SAP_MATNR | DSAI_SP_SAP_MATNR
------: | :------------------ | :----------------
  11670 | PR000349059         | SP000010709      
  40096 | PR000349059         | SP000748362      
  40099 | PR000349059         | SP000748132      
  40100 | PR000349059         | SP000748130      
  40101 | PR000349059         | SP000748128      
  40106 | PR000349059         | SP000748370      
  40108 | PR000349059         | SP000748366      
  40109 | PR000349059         | SP000748364      
SELECT
    fct.FVPO_VPA_ID 
  , dim.DSAI_ID
  , fct.FVPO_price_product_id 
  , fct.FVPO_material_number 
  , dim.DSAI_PRPR_SAP_MATNR
  , dim.DSAI_SP_SAP_MATNR
  , fct.FVPO_Quantity  
FROM OP_DIM_SALES_ITEM dim
LEFT JOIN OP_FCT_SDDB_VPA_POSITION fct ON dim.DSAI_SP_SAP_MATNR = fct.FVPO_material_number
WHERE dim.DSAI_PRPR_SAP_MATNR = 'PR000349059'
AND dim.dsai_subito_transfer_flag = 'Y'
ORDER BY
    fct.FVPO_VPA_ID 
  , dim.DSAI_ID

GO
FVPO_VPA_ID | DSAI_ID | FVPO_price_product_id | FVPO_material_number | DSAI_PRPR_SAP_MATNR | DSAI_SP_SAP_MATNR | FVPO_Quantity
:---------- | ------: | :-------------------- | :------------------- | :------------------ | :---------------- | ------------:
<em>null</em>        |   11670 | <em>null</em>                  | <em>null</em>                 | PR000349059         | SP000010709       |          <em>null</em>
<em>null</em>        |   40096 | <em>null</em>                  | <em>null</em>                 | PR000349059         | SP000748362       |          <em>null</em>
<em>null</em>        |   40099 | <em>null</em>                  | <em>null</em>                 | PR000349059         | SP000748132       |          <em>null</em>
<em>null</em>        |   40100 | <em>null</em>                  | <em>null</em>                 | PR000349059         | SP000748130       |          <em>null</em>
<em>null</em>        |   40101 | <em>null</em>                  | <em>null</em>                 | PR000349059         | SP000748128       |          <em>null</em>
17270       |   40106 | PR000349059           | SP000748370          | PR000349059         | SP000748370       |       5565604
17270       |   40108 | PR000349059           | SP000748366          | PR000349059         | SP000748366       |       2589732
17270       |   40109 | PR000349059           | SP000748364          | PR000349059         | SP000748364       |       1962898

db <> fiddle здесь

Насколько я хочу это сделать. Я не включил группу по частям 1 запроса, который вам нужно будет вернуть, но, надеюсь, теперь вы можете увидеть цель предоставления «образцов данных» (не изображений, а DDL и вставок) и «ожидаемого результата» (также не изображение). С данными и кодом мы можем на самом деле запускать вещи. Кстати, я не ввел все эти данные, но смог перепроектировать комментарий - но даже это не было тем, на что вы должны полагаться, чтобы мы сделали для вас в будущем.

ДОБАВЛЕНО: , чтобы ввести требуемый group by подзапрос, я предлагаю следующее:

SELECT
    fct.FVPO_VPA_ID 
  , dim.DSAI_ID
  , fct.FVPO_price_product_id 
  , fct.FVPO_material_number 
  , dim.DSAI_PRPR_SAP_MATNR
  , dim.DSAI_SP_SAP_MATNR
  , fct.FVPO_Quantity  
FROM OP_DIM_SALES_ITEM dim
LEFT JOIN (
        SELECT FVPO_VPA_ID, FVPO_price_product_id ,FVPO_material_number, SUM(FVPO_Quantity) AS FVPO_Quantity
        FROM OP_FCT_SDDB_VPA_POSITION
        GROUP BY FVPO_VPA_ID, FVPO_price_product_id ,FVPO_material_number
        ) fct ON dim.DSAI_SP_SAP_MATNR = fct.FVPO_material_number
WHERE dim.DSAI_PRPR_SAP_MATNR = 'PR000349059'
AND dim.dsai_subito_transfer_flag = 'Y'
ORDER BY
    fct.FVPO_VPA_ID 
  , dim.DSAI_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...