让一对多成一条线

时间:2013-09-25 19:48:06

标签: sql-server tsql

我有两张桌子

销售订单

  • SONumber
  • SOCompanyCode
  • SOItemNumber
  • SOWorkFlowLastCode
  • SOWorkFlowNextCode
  • SOLotNumber
  • SOItemDescription
  • SORequestNumber
  • SORequestQuantity
  • SODateUpdated

采购订单

  • 采购单号码
  • POItemNumber
  • POCompanyCode
  • POQuantity
  • PODeliveryDate
  • POWorkFlowNextCode

我正在尝试编写一个查询所有销售订单的查询,其中SOWorkFlowLastCode = 980,SOWorkFlowNextCode = 999,SODateUpdated是今天。

然后查找POItemNumber = SOItemNumber和POCompanyCode = SOCompanyCode和POWorkFlowNextCode!= 999的所有采购订单

以上所有内容对我来说都很容易。

困难的部分是,同一商品编号可以有0到多个采购订单,我需要将所有采购订单放在同一行上。

2 个答案:

答案 0 :(得分:0)

SELECT col1, col2, col3, dbo.GetSalesOrders(id) as sales_orders

CREATE FUNCTION GetSalesOrders(@id int)
RETURNS VARCHAR(MAX)
AS
BEGIN
   DECLARE @result VARCHAR(max)
   SET @result = ''
   SELECT @result = @result + orderNumber + ', ' FROM salesItems WHERE someID = @id
   IF (@result <> '') SET @result = LEFT(@result, LEN(@result) -1)
   RETURN @result
END

答案 1 :(得分:0)

我最终使用了两个临时表。 一个用于满足critera的所需销售订单,其中包含一个名为PODetails的附加列。 然后有另一个临时表拉下了符合条件的所有采购订单。

从那里我对销售订单临时表进行了更新,设置PODetails等于采购订单临时表中的STUFF,获取采购订单编号,数量和日期,并将它们转换为临时表项目编号匹配的VARCHAR XML PATH('')

然后我可以选择*从销售订单临时表中获取完整结果。

由于