请原谅我的头衔。我有一张这样的桌子:
将有数千行,现在我想选择具有相同group_id的行,但vr_debit和vr_credit值不能相等:ie;,在所示图像中,没有一行满足此条件。如果有两行,比如(6,500.000,0)和(6,0,600.000),我希望它们作为结果。希望你明白这个主意。
谢谢。
答案 0 :(得分:1)
使用SUM()
计算每个组,这是一个聚合函数,并使用HAVING
子句对其进行过滤。
SELECT GROUP_ID, SUM(vr_debit) totalDebit, SUM(vr_credit) totalCredit
FROM TableName
GROUP BY GROUP_ID
HAVING SUM(vr_debit) <> SUM(vr_credit)
如果要获取未计算的行,可以将其加入子查询。
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT GROUP_ID
FROM TableName
GROUP BY GROUP_ID
HAVING SUM(vr_debit) <> SUM(vr_credit)
) b ON a.GROUP_ID = b.GROUP_ID
答案 1 :(得分:1)
也许:
SELECT group_ID,
vr_debit,
vr_credit
FROM
dbo.TableName T1
WHERE
EXISTS(
SELECT 1 FROM dbo.TableName T2
WHERE T1.group_ID = T2.group_ID
AND T1.vr_debit <> T2.vr_debit
AND T1.vr_credit<> T2.vr_credit
AND T1.vr_debit <> T2.vr_credit
)
答案 2 :(得分:1)
您也可以使用此选项
SELECT *
FROM dbo.test64 t
WHERE EXISTS (
SELECT 1
FROM dbo.test64 t2
WHERE t.group_id = t2.group_id
HAVING SUM(t2.vr_debit) - SUM(t2.vr_credit) != 0
)
SQLFiddle上的演示