我试图找出如何编写某个子查询的代码。我一直得到"子查询返回超过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)的说明。我需要在一个专栏中。
答案 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 |
+--------+-----------------+-------------+