案例陈述返回多行

时间:2013-10-28 13:13:17

标签: sql sql-server join

我正在努力查询我的查询案例。我有主地址表和相关地址表,相关表订单表和订单表。 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都有多个地址,我只需要其中一个。实际地址可以是美国的任何地址,但在选择时,这是我需要遵循的地方

  1. 如果相关地址与主要地址处于相同状态 地址(基于OrderId),其中只有一个这样的地址 多个地址,然后选择那个以及结果如何。
  2. 如果有相同状态的重复,请将其缩小 县,这意味着,如果有多个国家和teh相同 主要地址,但只有一个是与主要地址相同的县 显示一个。
  3. 如果上述条件均不满足,或者存在重复 即使在县或国家字段为NULL(未记录为 soem属性的一些原因),那么在那种情况下,只需得到所有 OrderId的相关地址,以及ReId和Order by 系统支持唯一编号并选择第一个。
  4. # 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转到其他地方和订单并且只显示一个。但这似乎不会发生。顺便说一句,我也尝试了内部连接,而不是左边。它似乎仍然没有工作。我该如何解决这个问题?请告诉我。

0 个答案:

没有答案