【问题标题】:Subquery returned more than 1 value. VB6子查询返回超过 1 个值。 VB6
【发布时间】:2016-09-19 15:21:20
【问题描述】:

嗨,我正在尝试选择 movementline.qty 的值,但前提是 movements.movementscode 等于 RW,如果不只是放 0.00

SELECT levelfield1.description,
       products.reportuom,
       products.productcode,
       products.description,
       Isnull(Sum(ReceivingLine.qty), 0.00)       AS [B.Delivery],
       movements.movementcode,
       Isnull((SELECT qty
               FROM   MovementLine
               WHERE  movementcode = 'RW'), 0.00) AS [B. Returned]
FROM   Products
       LEFT JOIN LevelField1
              ON levelfield1.levelfield1code = products.levelfield1code
       LEFT JOIN ReceivingLine
              ON receivingline.PRODUCTCODE = products.productcode
       LEFT JOIN MovementLine
              ON movementline.ProductCode = products.productcode
       LEFT JOIN Movements
              ON movements.MovementID = MovementLine.movementid
GROUP  BY levelfield1.Description,
          products.reportuom,
          products.productcode,
          products.description,
          movementline.qty,
          movements.movementcode 

我有错误

子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一种表达。警告:空值被聚合消除或 其他 SET 操作。

【问题讨论】:

  • 如果movements.movementscode等于RW返回多行怎么办?
  • 从不使用相关子查询开始。他们是性能杀手。这可以通过连接到基表或派生表(如果需要进行计算)来完成)

标签: sql sql-server


【解决方案1】:

您的代码让人深入思考。因为可能存在连接问题,您可能无法得到正确的结果。问题将使用 top 1 解决,但不可能得到正确的结果。所以这里需要用到CASE。 我希望您的问题可以通过使用下面的代码来解决。

select levelfield1.description, products.reportuom, products.productcode,
        products.description ,ISNULL(SUM(ReceivingLine.qty),0.00) as [B.Delivery], 
  movements.movementcode,
  CASE 
    WHEN movementline.movementcode = 'RW' THEN ISNULL(movementline.qty,0.00)
    ESLE 0.00
  END AS [Returned]

  from Products 
  left join LevelField1 on levelfield1.levelfield1code = products.levelfield1code
  left join ReceivingLine on receivingline.PRODUCTCODE = products.productcode
  left join MovementLine on movementline.ProductCode = products.productcode
  left join Movements on movements.MovementID = MovementLine.movementid 
  group by levelfield1.Description, products.reportuom, products.productcode, products.description, movementline.qty,movements.movementcode

【讨论】:

  • 谢谢,但是移动线与产品是多对一的关系,我可以将移动线数量的总价值相加吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多