SQL同一列在一行中

时间:2010-07-08 18:51:23

标签: sql-server

我有一个查找表,其中包含名称和ID。例如:

ID                                                  NAME
-----------------------------------------------------------
5499EFC9-925C-4856-A8DC-ACDBB9D0035E             CANCELLED
D1E31B18-1A98-4E1A-90DA-E6A3684AD5B0                31PR

第一条记录显示和订单状态。下一个表示服务类型。

在订单表的查询中,我执行以下操作:

INNER JOIN order.id = lut.Statusid

这将从我的查找表中返回“已取消”的名称。我还需要同一行中的服务类型。这是订单表中的orders.serviceid连接我将如何进行此操作?

已取消但未连接到31PR。

订单连接到两者。订单中有2个字段,名为Servicetypeid和orderstatusid。这就是那些2连接到订单的方式。我需要在同一行中返回两个名称。

2 个答案:

答案 0 :(得分:1)

我想很多人会告诉你,在同一列中有两个不同的数据会违反第一个普通形式。有一个原因,为什么有一个查找表来统治它们是一个坏主意。但是,您可以执行以下操作:

Select  ..
From order
    Join lut
        On lut.Id = order.StatusId
    Left Join lut As l2
        On l2.id = order.ServiceTypeId

如果order.ServiceTypeId(或任何列的名称)不可为空,那么您可以改为使用Join(内部联接)。

答案 1 :(得分:0)

遗漏了很多信息,但在这里:

SELECT orders.id, lut1.Name AS OrderStatus, lut2.Name AS ServiceType
FROM orders
    INNER JOIN lut lut1 ON  order.id = lut.Statusid
    INNER JOIN lut lut2 ON order.serviceid = lut.Statusid