如何编写分割两行的查询?

时间:2010-11-13 10:53:32

标签: sql sql-server-2008

我有订单表

OrderId OrderStatusId  CurrencyId      PromotionCode
------------------------------------------------------
  137         5           1             123a-123d
  138         5           1             123a-123d-234c

我想像这样拆分PromotionCode列:

结果:

OrderId  OrderStatusId  CurrencyId  PromotionCode
-----------------------------------------------------
  137             5             1             123a
  137             5             1             123d
  138             5             1             123a
  138             5             1             123d
  138             5             1             234c

请帮帮我......

是否有可能......以任何方式尽可能帮助我......

1 个答案:

答案 0 :(得分:2)

如果促销代码总是4个字符长,最简单的方法可能是联合:

select  id, substring(code,1,4)
from    YourTable
where   LEN(code) >= 4
union all
select  id, substring(code,6,4)
from    YourTable
where   LEN(code) >= 9
union all
select  id, substring(code,11,4)
from    YourTable
where   LEN(code) >= 14
<etc>

要获得更灵活的解决方案,请查看其中一种Split functions。在数据库中创建此函数后,您可以调用它:

select  t.id, s.items
from    YourTable t
cross apply   
        dbo.Split(t.code,'-') s

两个查询都会根据您的答案中的要求生成结果。