Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用条件WHERE子句连接SQL语句而不使用过程?_Sql_Sql Server 2005_Join_Left Join - Fatal编程技术网

使用条件WHERE子句连接SQL语句而不使用过程?

使用条件WHERE子句连接SQL语句而不使用过程?,sql,sql-server-2005,join,left-join,Sql,Sql Server 2005,Join,Left Join,我正在使用SQLServer2005。我有一个表单,其中用户正在选择“附加”项。他们可以在一个特定的计划中,为这些附加组件支付不同于零售成本的价格 我有两张桌子: 插件 ID--------AddonName--------RetailCost 6---------Red Tint---------85 7---------Green Tint-------75 附加项覆盖(此表覆盖该项目的零售成本,并为该计划ID提供特殊成本) 用户选择红色色调(ID=6)和绿色色调(ID=7),并且位于Pl

我正在使用SQLServer2005。我有一个表单,其中用户正在选择“附加”项。他们可以在一个特定的计划中,为这些附加组件支付不同于零售成本的价格

我有两张桌子:

插件

ID--------AddonName--------RetailCost
6---------Red Tint---------85
7---------Green Tint-------75
附加项覆盖(此表覆盖该项目的零售成本,并为该计划ID提供特殊成本)

用户选择红色色调(ID=6)和绿色色调(ID=7),并且位于PlanID=10中。我想显示这些附加项目,他们选择与相应的成本

想要这个结果:

ID--------AddonName--------RetailCost--------Cost--------PlanID
6---------Red Tint---------85----------------50----------10
7---------Green Tint-------75----------------75----------NULL
ID--------AddonName--------RetailCost--------Cost--------PlanID
6---------Red Tint---------85----------------50----------10
6---------Red Tint---------85----------------25----------11
7---------Green Tint-------75----------------75----------NULL
不是这个结果:

ID--------AddonName--------RetailCost--------Cost--------PlanID
6---------Red Tint---------85----------------50----------10
7---------Green Tint-------75----------------75----------NULL
ID--------AddonName--------RetailCost--------Cost--------PlanID
6---------Red Tint---------85----------------50----------10
6---------Red Tint---------85----------------25----------11
7---------Green Tint-------75----------------75----------NULL
当前SQL

SELECT 
  DISTINCT t1.ID, 
  t1.RetailCost, 
  Cost=case when t2.VisionPlanID=10 then t2.Cost else t1.RetailCost end,  
  t2.PlanID 
FROM 
  Addons t1 
LEFT OUTER JOIN 
  Addons_Override t2 
ON 
  t1.ID=t2.AddonID 
WHERE (VisionPlanID=10 AND ID=6) or ID=7
问题是我不能像这样编写select语句,因为我不知道哪些语句在Addons\u Override表中。什么select语句可以为我提供上面想要的结果

请帮忙

SELECT t1.ID, t1.RetailCost,
CASE 
 WHEN t2.PlanID IS NOT NULL THEN t2.Cost
 ELSE t1.RetailCost
END as Cost,
t2.PlanID
FROM Addons t1
LEFT JOIN Addons_Override t2 ON (t1.ID = t2.AddonID AND t2.PlanID = 10)

只需将引用表2的任何元素从WHERE子句移动到JOIN子句

帮助一个姐妹。
——有人慈善吗?:)令人惊叹的!你是救命恩人!非常感谢。
SELECT t1.ID, t1.RetailCost,
    COALESCE(t2.Cost, t1.RetailCost) As Cost,
    t2.PlanID
FROM Addons t1
LEFT JOIN Addons_Override t2 ON t1.ID = t2.AddonID AND t2.PlanID=10
WHERE t1.ID IN (6,7)