我有两个表(使用Left Outer Join连接),主表总是有数据,而辅助表可能有或有很多没有数据的地方,使用where子句
我的问题是,当辅助表返回行时,如果辅助表返回零行,则只有我的查询显示一些数据,然后我的查询也返回了零行,但是我正在使用据我所知,尽管辅助表返回零行,但我需要从主表获取数据。
select * from
(
SELECT Flag, [Description1], [group_code], [category_code]
FROM Item_TMP
) b --Primary table
Left outer join
Base a --Seconday table
on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F'
AND b.type = 'Goods'
无论表2返回的行如何,我都需要有数据。
Item_TMP表
Flag [Description1] [group_code] [category_code]
WO Computers FP A
SO LAptops FP F
基本表
part_id quantity
A 50
F 100
现在基本表可能返回或不返回的地方
必需的输出
如果基本表返回数据,则
Flag [Description1] [group_code] [category_code] Sales
WO Computers FP A 50
SO LAptops FP F 100
如果基本表不返回数据
Flag [Description1] [group_code] [category_code] Sales
WO Computers FP A 0
SO LAptops FP F 0
答案 0 :(得分:1)
您可以尝试使用ISNULL
或coalesce
函数
select b.*,coalesce(quantity,0) Sales
from
(
SELECT Flag, [Description1], [group_code], [category_code]
FROM Item_TMP
) b --Primary table
Left join
Base a --Seconday table
on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F'
AND b.type = 'Goods'
答案 1 :(得分:1)
我将使用isnull()通过简单的左连接将其编写
select b.Flag, b.[Description1], b.[group_code], b.[category_code],
isnull(a.quantity, 0) Sales
FROM Item_TMP b
Left join Base a on a.Part_ID = b.category_code
where b.category_code between 'A' and 'F'
AND b.type = 'Goods'