Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
名称包含值的SQL子查询列_Sql_Sql Server - Fatal编程技术网

名称包含值的SQL子查询列

名称包含值的SQL子查询列,sql,sql-server,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] LI

我试图找出如何编写某个子查询。我一直收到“子查询返回的值超过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)的描述。我需要一个单独的专栏

您可以使用获取订单的父部分(直到连字符),并将其与“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
雷克斯测试仪:

结果:

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

这些订单是如何命名的?连字符前面的数字是唯一的事务编号,01、02等是行/子编号吗?在我看来,您在这里遇到了困难,因为您的数据将两个数据点塞入一列,违反了1NF。如果这两个值位于两列中,而不是一列中的两个值,那么这将容易得多。如果可能的话,你应该改变设计……当然,这并不总是可能的,我们必须努力解决以前做出的不太理想的决定。@Datallboy添加了一个测试来向你展示我的意思。看起来我把名为
order
的列与
name
列混淆了。它们是表名的
别名(本例中为同一个表)。
+--------+-----------------+-------------+
|  Job   | Master Job Desc | Description |
+--------+-----------------+-------------+
| Name 1 | Descr 1         | Descr 1     |
| Name 2 | Descr 1         | Descr 2     |
| Name 3 | Descr 1         | Descr 3     |
+--------+-----------------+-------------+