我正在努力查询我的查询案例。我有主地址表和相关地址表,相关表订单表和订单表。 Orders表是主表,它包含OrderId。主地址表包含每个OrderId的记录。相关地址表包含主地址表中每个地址的多个地址。相关地址和主地址表与公共列无关。相关订单表已获得订单表中每个OrderId的每条记录。在“相关订单”表中,每个订单ID都有ReId。 以下是易于理解的表格。本问题适用于SQL SERVER 2008 R2
Orders ------------------------ **OrderId**| some other columns not needed here| Main Address Table --------------------------- **OrderId** | Address| City | State | Zip| County| Related Table Orders --------------------------- **OrderId** | **ReId** Related Address Table --------------------- UniqueId| **ReId**| Address |City | State | Zip| County|
我的条件是,[Orders]
表包含OrderId
,我必须选择OrderId并转到主地址表并获取地址,城市,县等。另一方面,我还需要转到[Related Table Orders]
表并获取每个OrderID的ReId
,然后在[相关地址表]中获取ReId
的相关属性。这里的问题是,这个表中每个ReId
都有多个地址,我只需要其中一个。实际地址可以是美国的任何地址,但在选择时,这是我需要遵循的地方
OrderId
),其中只有一个这样的地址
多个地址,然后选择那个以及结果如何。# TEMP ------------- OrderId | ReId | UniqueId | TAddress| TState | TCounty每个相关地址
ReId
不是唯一的。对于每个OrderId,只有一个ReId
但是对于每个ReId,可能有多个地址。对于相关地址唯一唯一的事情是UniqueId
。我知道你可能在想,为什么放OrderId
然后再放入ReId,你不能放OrderId
并将它联系起来。它如此简单。我理解,但由于某种原因,我们的数据库人员这样做了。 (或者可能是因为我不知道的其他原因使用它。)
我的问题是,我正在写一个case语句,它返回多行而不是一行,我不知道为什么。
我做的是,我创建了一个临时表,结合[相关地址表]和[相关表格订单]加入 ReId 。现在,我刚刚加入了[Orders ]
,主要地址表和临时表,并根据案例陈述检查了主要地址和相关地址的[State]
和[County]
。以下是案例陈述,这个是
SELECT
CASE WHEN R1.State=R2.TState and Count(R2.OrderId)=1
THEN R2.Address
WHEN R1.State=R2.TState and R1.County=R2.County and Count(R2.OrderId)=1
THEN R2.Address
ELSE (SELECT TOP1 R2.Address from #Temp Order By R2.UniqueId asc)
END AS AddRelatedProperty
FROM #TEMP R2
left join [Main Address Table] R1 on R1.OrderId=R2.OrderId
Group by R1.State, R2.TState, R2.UniqueId, R2.County, R1.County
结果是,AddRelatedProperty列中显示的所有相关属性的县名。在这种情况下,此OrderId
有3000个属性,它显示所有3000行而不是一行。我究竟做错了什么。 ?我检查并确定条件1和2将会失效,因为在这种情况下州和县都有重复,它应该通过UniqueId
转到其他地方和订单并且只显示一个。但这似乎不会发生。顺便说一句,我也尝试了内部连接,而不是左边。它似乎仍然没有工作。我该如何解决这个问题?请告诉我。