【发布时间】:2019-03-26 15:19:52
【问题描述】:
我有 2 张桌子,ITEM 和 TARIF。在关税表中,我有父项目和一些孩子的价格。现在我必须通过将TARIF 表加入ITEM 表来获取父级的价格。在 tarif 表中,一些父级将不存在,但在加入时,它正在为父级和子级创建一个具有“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
【问题讨论】:
-
也许使用
inner join而不是left join? -
在 where 子句中再包含一个条件 -> where amount 不为空
-
如果我使用 Inner join ,我无法将父级价格传递给子级
-
谢谢 Marc_s ,Sahi 回答我
标签: sql sql-server tsql