我有三个表,它们之间都有共同的产品代码,语言是唯一不同的变量。所以第一个表是我的数据库中Lang列下的所有语言,第二个EN和第三个DE。
所以对于这个问题,我想简单地说明,如果在表中“all”产品代码与“EN”表格中存在lang“EN”,请保留该记录,如果没有找到该记录但是在带有“DE”语言代码的“DE”表并保留该记录。
主键是表之间的SAP_NO,但我不确定如何将其合并到语句中。
select
[Qry Acc Ass Grp All SKUs].COM_CODE,
[Qry Acc Ass Grp All SKUs].SAP_NO,
[Qry Acc Ass Grp All SKUs].MANUF_CODE,
[Qry Acc Ass Grp All SKUs].MANUF_PART_NO,
[Qry Acc Ass Grp All SKUs].SHORT_TEXT_ENG,
[Qry Acc Ass Grp All SKUs].MAT_CLASS,
[Qry Acc Ass Grp All SKUs].ASSIGNMENT_GRP,
[Qry Acc Ass Grp All SKUs].LANG,
[Qry Acc Ass Grp All SKUs].DESCR
From ([Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp EN] , [Qry Acc Ass Grp DE]
IF EXISTS
(
SELECT *
FROM [Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp EN]
WHERE [Qry Acc Ass Grp All SKUs].LANG = [Qry Acc Ass Grp EN].LANG
)
ELSE
IF NOT EXISTS
(
SELECT *
FROM([Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp DE]
WHERE [Qry Acc Ass Grp All SKUs].LANG = [Qry Acc Ass Grp DE].LANG
)
END;
提前感谢您的帮助和时间!
答案 0 :(得分:0)
也许你可以通过工会解决这个问题。只需选择两者,然后获取第一个
SELECT TOP 1 *
FROM (
SELECT Column FROM Language1 -- IF NULL, THEN Language2 is first row
UNION
SELECT Column FROM Language2
) tbl
答案 1 :(得分:0)
如果您使用的是SQL Server,则可以使用cross apply
执行此操作。查询看起来像这样:
select *
from [Qry Acc Ass Grp All SKUs] a CROSS APPLY
(select top 1
from ((select 'EN' as language, 1 as priority, l.* from [Qry Acc Ass Grp EN] l
) union all
(select 'DE' as language, 2 as priority, l.* from [Qry Acc Ass Grp DE] l
)
) l
order priority
) l
答案 2 :(得分:0)
这通常使用与左连接的最佳匹配来完成:
select
sku.COM_CODE,
sku.SAP_NO,
sku.MANUF_CODE,
sku.MANUF_PART_NO,
sku.SHORT_TEXT_ENG,
sku.MAT_CLASS,
sku.ASSIGNMENT_GRP,
sku.LANG,
sku.DESCR,
coalesce(en.column1, de.column1),-- if english exists, use it, otherwise deutsch
coalesce(en.column2, de.column2)
From ([Qry Acc Ass Grp All SKUs] as sku
join [Qry Acc Ass Grp EN] as en -- join english data
on sku.LANG = en.LANG
and sku.SAP_NO = en.SAP_NO
left join [Qry Acc Ass Grp DE] as de -- join german data
on sku.LANG = de.LANG
and sku.SAP_NO = de.SAP_NO
答案 3 :(得分:0)
我不完全理解表之间的引用,但你应该尝试类似:
SELECT [SKUs].COM_CODE,
[SKUs].SAP_NO,
[SKUs].MANUF_CODE,
[SKUs].MANUF_PART_NO,
[SKUs].SHORT_TEXT_ENG,
[SKUs].MAT_CLASS,
[SKUs].ASSIGNMENT_GRP,
COALESCE([EN].LANG, [DE].LANG, [SKUs].LANG) LANG,
COALESCE([EN].DESCR, [DE].DESCR, [SKUs].DESCR) DESCR
FROM [SKUs]
LEFT JOIN [EN] ON [EN].SAP_NO = [SKUs].SAP_NO
LEFT JOIN [EN] ON [DE].SAP_NO = [SKUs].SAP_NO
我正在使用:
COALESCE - 获得第一个NON NULL值i此订单EN,DE SKU
LEFT JOIN - 如果[EN]或[DE]引用的行不存在,则不限制[SKU]表中的记录