SQL子查询列,其中名称包含值

时间:2017-01-31 21:45:59

标签: sql sql-server

我试图找出如何编写某个子查询的代码。我一直得到"子查询返回超过1的值"错误。我需要查询父订单的描述而不是子订单。

示例:
家长:100-01 子订单:100-02,100--03
每个订单都有描述。但是在一栏中我需要父母的描述:

WHERE [ORDER] LIKE '%-01'

目前的代码如下:

SELECT  NAME as [Job],
        [Master Job Desc] = (SELECT TOP 1 [DESCR] FROM TABLE WHERE [NAME] LIKE '%-01'),
        LEFT(or_order.descr,30) as [Description],
FROM TABLE
ORDER BY OR_ORDER.DELIVERY asc, or_op.STARTSEC asc

有什么建议吗?感谢

编辑:我忘记了,我已经尝试将TOP 1添加到子查询中,但它只返回整个列的相同值。我不想那样,我想找到父工作单。

EDIT2:这是我正在寻找的单独的SQL。

SELECT [DESCR] FROM [Or_Order] WHERE [NAME] LIKE '%-01'

以上语句返回名称包含父作业号(-01)的说明。我需要在一个专栏中。

1 个答案:

答案 0 :(得分:0)

您可以使用charindex()获取订单的父级部分(直到连字符)并将其与“01”连接。有了它,您可以加入到同一个表中以获取父订单描述。

select
      Job = c.Name
    , [Master Job Desc] = p.Descr
    , [Description] = left(c.descr,30) 
  from or_order as c
    left join or_order as p 
      on left(c.[order],charindex('-',c.[Order]))+'01' = p.[Order]
  order by delivery asc, or_op.startsec asc

rextester:http://rextester.com/GSN90790

create table or_order (
    [order] varchar(32)
  , Name varchar(32)
  , Descr varchar(32)
);

insert into or_order values 
    ('100-01','Name 1','Descr 1')
  , ('100-02','Name 2','Descr 2')
  , ('100-03','Name 3','Descr 3');

select
    Job = c.Name
  , [Master Job Desc] = p.Descr
  , [Description] = left(c.descr,30) 
  from or_order as c
    left join or_order as p 
      on left(c.[order],charindex('-',c.[Order]))+'01' = p.[Order]

结果:

+--------+-----------------+-------------+
|  Job   | Master Job Desc | Description |
+--------+-----------------+-------------+
| Name 1 | Descr 1         | Descr 1     |
| Name 2 | Descr 1         | Descr 2     |
| Name 3 | Descr 1         | Descr 3     |
+--------+-----------------+-------------+