名称包含值的SQL子查询列
我试图找出如何编写某个子查询。我一直收到“子查询返回的值超过1”错误。我需要查询父订单而不是子订单的描述 示例:名称包含值的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
父订单: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 |
+--------+-----------------+-------------+