具有条件模数的SQL子查询

时间:2017-12-14 18:49:32

标签: sql sql-server sql-server-2012

我已将这个问题放在一起,我很难理解为什么它会返回LINES的全部数量而不仅仅是LINES的奇数ITEMS }。例如:现在我有2 LINES其中COMPLETED被标记为True。其中一个具有奇数ITEMS,其中一个具有偶数ITEMS但是尽管有条件,查询仍然返回2。我的查询有什么问题?

SET @linesCompleted = (SELECT Count([so_line_number]) AS LINES 
                       FROM   [aof_order_line_queue] 
                       WHERE  [completed] = 'True' 
                              AND (SELECT Count([serial_number]) AS ITEMS 
                                   FROM   [aof_order_items] 
                                   WHERE  so_line_number IN (SELECT 
                                          [so_line_number] 
                                                             FROM 
                                          [aof_boxes_lines] 
                                                             WHERE 
                                          [aof_boxes_id] = 880)) % 2 = 1) 

此处的目标是计算框中包含的LINES的数量,这是一个奇数。

我怀疑问题是IN子查询返回两个结果,但一个结果应该是奇数,一个结果应该是偶数。

1 个答案:

答案 0 :(得分:1)

问题是外部查询与内部查询缺乏相关性。

您要求它计算aof_order_line_queue中的行数(与该行无关的内容)为真。因此,对于整个数据集,括号中的内容为true或false,而不是每行。如果它是真的,它将计算所有行。如果它是假的,它将返回0.

您必须添加类似

的内容
AND aof_order_items.queue_id = aof_order_line_queue.queue_id

到您的内部查询。