【发布时间】:2014-12-04 06:46:18
【问题描述】:
我有以下 4 个表:MainTable、Warehouse、Customer 和 Company。
这些表的架构:
create table MainTable(ID int, Warehouse_id int, Customer_ID int)
create table Warehouse (Warehouse_id int, company_id int)
create table Customer (Customer_ID int, Company_ID int)
create table company (Company_id int, Country_ID int, Zone_ID int)
objectif 是获取(MainTable 的)对应 ID 的 Country_ID 和 Zone_ID。
我们有 2 种不同的情况:if MainTable.Warehouse_ID 不为空,我们应该对 Warehouse 表(在字段warehouse_id)进行内部连接,然后在公司表(在字段 Company_ID)上进行连接,
else(如果 MainTable.Warehouse_ID 为空)我们应该在 Customer 表(在 Customer_ID 字段上)和 Company 表(在 Company_ID 字段上)进行内部连接。
以下查询在单词“case”附近生成错误:
select CO.Country_ID, CO.Zone_ID
from MainTable MT
inner join (case
when MT.Warehouse_ID is not null
then
Warehouse W on MT.Warehouse_ID=W.Warehouse_ID
inner join Company CO on W.Company_ID=CO.Company_ID
else
Customer Cu on MT.Customer_ID=Cu.Customer_ID
inner join Company C on Cu.Company_ID=CO.Company_ID
end)
我是否正确地处理了一个我错过的小语法错误?如果没有..还有其他方法吗?
谢谢
【问题讨论】:
-
一种方法是动态查询!但你需要为它使用一个存储过程
-
动态 SQL 无济于事,因为条件特定于每一行
标签: sql-server case inner-join