当'x'出现时显示项目

时间:2014-04-07 19:51:48

标签: sql tsql

好的,所以希望我能在没有快乐的情况下寻求帮助。

所以我有一个关键'orderno',每个'orderno'有多个项目。每个项目都有一个状态。我想拉一个Q,它只显示包含状态为'x'

的项目的orderno

所以如果有3个项目且只有1个显示状态'x'我想看到所有三个项目而不仅仅是那个。

基本上删除任何不显示x值的订单/商品。

所以table1

orderno / Itemno / Itemstatus
1           1          y
1           2          x
2           1          z
3           1          y
3           2          x
3           3          y
4           1          y
4           1          y

编辑:

所以基本上这些字母代表开放,关闭或进行...我想只看到有关闭和项目已关闭的订单以及正在进行的项目,所以我可以看到为什么订单只显示从那里部分完成。这里可能还没有意义。 GRRRR。

我需要为包含状态为“x”的项目的任何订单返回ORDER#和所有项目#。

2 个答案:

答案 0 :(得分:2)

SELECT * FROM Order_Table
WHERE orderno IN
(SELECT orderno FROM Order_Table WHERE Itemstatus = 'x')

内部查询返回状态为'x'的所有订单,外部订单返回这些订单的所有详细信息。

答案 1 :(得分:1)

我更喜欢EXISTS到IN或JOIN版本。一般来说更快。

添加了sqlfiddle

CREATE TABLE table1(orderno INT, Itemno INT, Itemstatus CHAR(1))

INSERT INTO table1 VALUES 
 (1,1,'y')
,(1,2,'x')
,(2,1,'z')
,(3,1,'y')
,(3,2,'x')
,(3,3,'y')
,(4,1,'y')
,(4,1,'y')

SELECT *
  FROM table1 a
 WHERE EXISTS(SELECT 1 
                FROM table1 b 
               WHERE b.OrderNo = a.OrderNo 
                 AND b.Itemstatus='x')