我有一张桌子,上面有一堆记录。
表如下所示(简化):
ID DoID DoQty DoType DoValue
1 17 1 Door 15
2 17 -1 Door -15
3 18 1 Window 75
4 19 1 Bed 125
5 19 1 Bed 134
所以这就是我想要拉的
ID DoId DoQty DoType DoValue
3 18 1 WIndows 75
4 19 1 Bed 125
5 19 1 Bed 134
我不需要DoID = 17,因为它有第二行,DoQty为-1。所以总体DoQty =0。我只需要没有DoQty = -1的记录。这里的问题是我不想按DoID分组,我希望能够看到整个记录行(无分组依据)
编辑:
不幸的是,我可能没有正确解释我的问题。基本上,如果我运行以下查询,则会得到正确的计数,但是我的目标是获取每一行的详细信息。
SELECT t.DoID,
'Available' = Sum(t.DoQty)
From t
GROUP BY t.DoID
这给了我无法进行任何处理的分组结果。
答案 0 :(得分:1)
据我了解,您没有记录在何行中任何负DoQty的记录。如果正确,则可能的解决方法如下,
SELECT t1.ID, t1.DoID, t1.DoQty, t1.DoType, t1.DoValue
FROM table t1
LEFT JOIN table t2 ON t2.DoQty < 0 AND t1.DoID = t2.DoID
WHERE t2.DoID IS NULL
答案 1 :(得分:0)
这是您想要的吗?
select t.*
from t
where not exists (select 1 from t t2 where t2.doid = t.doid and t2.doqty = - t.doqty);
这会过滤掉存在“负”值的行。
答案 2 :(得分:0)
我们可以在此处使用条件聚合:
WITH cte AS (
SELECT DoID
FROM yourTable
GROUP BY DoID
HAVING SUM(CASE WHEN DoQty < 0 THEN 1 ELSE 0 END) = 0
)
SELECT *
FROM yourTable
WHERE DoID IN (SELECT DoID FROM cte);
这将返回每个DoID
记录组中 not 没有负值的DoQty
值。
答案 3 :(得分:0)
我在这里要做的只是拉没有DoQty> 0的DoID。
尝试一下...
SELECT DoID
FROM table tbl
WHERE NOT EXISTS (
SELECT DoID FROM table WHERE DoQty <= 0 AND DoID = tbl.DoID
);
答案 4 :(得分:0)
您可以尝试以下操作:
使用Agg AS
(
从TableName中选择DOID,sum(DoQty)作为数量
按总和(DoQty)> 0
的DOID分组
)
从TableName T内连接Agg A中选择T. *
在T.DOID = A.DOID;
答案 5 :(得分:0)
您似乎想要:
WebXmlParser parser = new WebXmlParser(false, false, true);