Sql 如果一行没有';我不能从另一张桌子上取
我有三个表,它们之间都有一个共同的产品代码,语言是唯一不同的变量。所以第一个表是所有语言,第二个EN和第三个DE在我的数据库的Lang列下 所以对于这个问题,我想简单地说明,如果在表“all”中,产品代码存在,并且带有“EN”表中的lang“EN”,那么请保留该记录,如果没有找到该记录,请在带有“DE”lang代码的“DE”表中找到该记录,并保留该记录 主键是表之间的SAP_NO,但我不确定如何将其合并到语句中Sql 如果一行没有';我不能从另一张桌子上取,sql,Sql,我有三个表,它们之间都有一个共同的产品代码,语言是唯一不同的变量。所以第一个表是所有语言,第二个EN和第三个DE在我的数据库的Lang列下 所以对于这个问题,我想简单地说明,如果在表“all”中,产品代码存在,并且带有“EN”表中的lang“EN”,那么请保留该记录,如果没有找到该记录,请在带有“DE”lang代码的“DE”表中找到该记录,并保留该记录 主键是表之间的SAP_NO,但我不确定如何将其合并到语句中 select [Qry Acc Ass Grp All SKUs].COM_COD
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;
提前感谢您的帮助和时间 也许你可以用union解决这个问题。只需选择两者,并获取第一个
SELECT TOP 1 *
FROM (
SELECT Column FROM Language1 -- IF NULL, THEN Language2 is first row
UNION
SELECT Column FROM Language2
) tbl
如果您使用的是SQL Server,则可以使用
交叉应用
执行此操作。查询如下所示:
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
这通常是通过使用一种具有左连接的最佳匹配来完成的:
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
我不完全理解表之间的引用,但您应该尝试以下方法:
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
即时通讯使用:
合并-获取此订单的第一个非空值i EN,DE SKU
左连接-如果[EN]或[DE]引用的行不存在,则不限制[SKU]表中的记录您使用的DMS是什么?是SQL Server吗?神谕另外