2012-09-14 171 views
1

表名medcn_recrd查询来选择记录

Name Qty Id 
a  12 asc 
a  0 asdc 
b  0 asfg 
c  12 ascd 
c  15 acs 

查询选择选择id其中名称具有数量= 0和名称> 0 的总数量在上面的例子中ASDC选择编号。

+2

。这是功课吗? “名称总数> 0”是什么意思? –

+0

总和(数量)名称> 0 – chetan

回答

5

如何像

SELECT * 
FROM TABLE t 
WHERE Qty = 0 
AND  EXISTS (
        SELECT Name 
        FROM TABLE t1 
        WHERE t1.Name = t.Name 
        GROUP BY Name 
        HAVING SUM(Qty) > 0 
       ) 
+0

表名是medcn_recrd,在上例中t和t1表示的是什么。 – chetan

+0

t和t1用作表的别名,因此如果在查询中多次使用相同的表,它就知道您所指的是哪个表。 –

+0

完成。我可以使用上面的查询作为DELETE FROM medcn_recrd吨 WHERE数量= 0 AND EXISTS(SELECT 名称 FROM medcn_recrd T1 WHERE = t1.Name t.Name GROUP BY名称 HAVING SUM(数量)> 0 ) – chetan

0

我会认为这是一个跳脱您的部分:你写的查询的一半您的描述

SELECT t.Id 
FROM theTable t 
INNER JOIN 
(
    SELECT Name 
    FROM theTable 
    GROUP BY Name 
    HAVING SUM(Qty)>0 
) sumN ON t.Name = sumN.Name 
WHERE t.Qty = 0 
+0

您尝试以上查询一旦它将返回一个id和null。 – chetan

+0

我编辑这个来写出整个查询。它几乎和@ astander下面的答案完全一样,只是使用JOIN而不是EXISTS,所以它应该可以工作 –