SQL-запрос для извлечения значений из родительского в дочерний - PullRequest
1 голос
/ 26 марта 2019

У меня есть 2 таблицы, ITEM и TARIF.В таблице тарифов у меня есть цена для родительского элемента и некоторых детей.Теперь мне нужно получить цену parent для его потомков, соединив таблицу TARIF с таблицей ITEM.В таблице тарифов какого-либо родителя там не будет, но при соединении он создает строку для родителя и потомка со значением «NULL».Я не хочу экспортировать элементы, если их родитель не существует в таблице TARIF.

Item стол

status  item_code ga_article
-----------------------------
Parent1 1234      1234   X
child1  1234      1234 01 x
child2  1234      1234 02 x
parent2 2345      2345   X
child21 2345      2345 01 X
child22 2345      2345 02 x
parent3 3456      3456  X
child31 3456      3456 01 X

tarif стол

item_code gf_article  price
----------------------------
1234      1234  X     100
2345      2345  X     150
2345      2345 01 X   200

СЕЙЧАС, когда я присоединяюсь TARIF к столу Item, чтобы получить цену

select 
    ga_article,
    case 
       when t.price is null and i.ga_article like i.item_code +'X%' 
          then (select top(1) price from tarif 
                where GF_ARTICLE like item-code + '%' ) 
          else price
    end as amount
from 
    article
left join 
    TARIF on gf_article = ga_article 

Мой вывод:

ga_article  amount
-------------------
1234  X      100
1234 01 x    100
1234 02 x    100
2345  X      150
2345 01 x    200
2345 02 x    150
3456  X      null
3456 01 x    null

Я не хочу видеть две последние строки с нулевым значением

SELECT
    CASE 
       WHEN GF_PRIXUNITAIRE IS NULL
            AND ga_article LIKE ga_Codearticle + '%X' 
          THEN (SELECT TOP(1) GF_PRIXUNITAIRE FROM tarif 
                WHERE GF_ARTICLE LIKE ga_Codearticle + '%' 
                  AND GF_DEVISE='QAR' ) 
          ELSE GF_PRIXUNITAIRE
    END AS price
FROM  
    Article A 
LEFT JOIN 
    tarif L ON gf_article = GA_ARTICLE 
            AND GF_DEVISE = 'QAR' 
            AND GF_REGIMEPRIX = 'TTC' 
WHERE
    GA_STATUTART <> 'UNI' AND GA_CODEARTICLE <> ''

Мой ожидаемый вывод:

ga_article  amount
---------------------
1234  X      100
1234 01 x    100
1234 02 x    100
2345  X      150
2345 01 x    200
2345 02 x    150

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Пожалуйста, попробуйте это

SELECT * FROM
(select ga_article,
case when t.price is null and i.ga_article like i.item_code +'X%' then(SELECT TOP(1) price FROM tarif WHERE GF_ARTICLE like item-code+ '%' ) 
else price
end as amount
from article
left join TARIF on gf_article = ga_article ) AS A WHERE A.amount IS NOT NULL
0 голосов
/ 26 марта 2019

Вы можете завершить запрос как

from article a
join tarif t on t.item_code = a.item_code

Итак, используйте ниже как соединение с внутренним объединением item_code столбцов

select ga_article,
       case
         when t.price is null and i.ga_article like i.item_code + 'X%' then
          (SELECT TOP(1) price
             FROM tarif
            WHERE GF_ARTICLE like item - code + '%')
         else
          price
       end as amount
  from article a
  join tarif t on t.item_code = a.item_code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...