0

这是我拥有的数据示例:

-----------------------------------
 ID | Item                 | Value
  1 | Carrot               |  0
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

我想做一个查询,如果出现以下情况,则出现值为 0 的行:

  • 它们是该项目的唯一价值
  • 该项目有多个其他值

或者另一种说法是,如果出现以下情况,它们不应该出现在结果中:

  • 同一个项目只有一个值

请注意,这对 (item, value) 在我的数据中是唯一的。

所以对于数据样本,查询的结果应该是这样的(只有第一行走了):

-----------------------------------
 ID | Item                 | Value
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

最好和最有效的方法是什么?

4

1 回答 1

2

您必须按项目对数据进行分组,因此一种可能性是

SELECT ID, Item, Value 
FROM data 
WHERE Value <> 0
OR Item IN
  (SELECT Item FROM data
   GROUP BY Item
   HAVING COUNT(*) <> 2);

看到这个 SQLFiddle

于 2012-10-20T12:48:38.703 回答