在where语句不返回我行的情况下为null

时间:2019-02-09 22:01:36

标签: sql-server sql-server-2008-r2

我正在使用复杂的查询。即使没有发现任何东西,我也必须始终返回我的行。

SELECT 
  a.InventoryItemID,
  a.Name,
  a.RetailPrice,
  b.MainGroupItemCode,
  b.MainGroupItemID,
  c.VatValue,
  a.Code,
  a.Weight,
  b.MainGroupItemName,
  a.RetailPrice2,
  a.FreePrice,
  case when isnull(e.IsActive,0)=1 and isnull(d.price,0)!=0 then d.Price else RetailPrice End  as CustomPrice 
from InventoryMaster a 
join InventoryMainGroupItems b on a.MainGroupItemID=b.MainGroupItemID 
join VatCodes c on b.VatCodeID=c.VatCodeID 
join InventoryPrices d on d.InventoryItemID=a.InventoryItemID 
join InventoryCatalog e on e.CatalogID=d.CatalogID 
where a.InventoryItemID=2 and ISNULL(e.catalogID,1)=3

问题出在最后一行ISNULL(e.catalogID,1)= 3。在我的表格中,它不存在编号为3的CatalogID。 因此它不会返回任何内容,但是存在编号为1的CatalogID。我已将if为null设置为返回给我1,但是不幸的是,我没有从查询中返回任何行。我该如何解决?

我的问题已经解决,我只想添加一个带有白色条件的连接表

SELECT * 
from 
( 
SELECT t1.ID, 
t1.Name, 

COALESCE(t2.price,t1.Price) AS price , 
Row_number() OVER(partition BY t1.ID ORDER BY t1.ID) rn 
FROM InventoryMaster t1 
LEFT JOIN inventoryprices t2 
ON t1.ID=t2.ID 

LEFT join InventoryCatalog t3 
ON t3.ID=t2.ID and t3.ID=2 

where t1.ID=2 
) t 
WHERE t.rn=1

它总是向我返回第一张表库存中的零售价

1 个答案:

答案 0 :(得分:0)

在选择开始位置附近添加3个列

  d.InventoryItemID,
  d.CatalogID,
  e.CatalogID

然后从“位置”中删除“ And ISNULL”,然后运行以查看得到的内容。

可能是

join InventoryCatalog e
needs 
ON d.CatalogID=ISNULL(e.catalogID,1)