Sql 为两个字段选择具有dstinct值的行

Sql 为两个字段选择具有dstinct值的行,sql,sql-server,sql-server-2008,join,Sql,Sql Server,Sql Server 2008,Join,请原谅我的标题。我有一张这样的桌子: 将有数千行,现在我想选择具有相同组id的行,但vr_debit和vr_credit值不能相等:即;,在所示的图像中,没有一行满足此条件。如果有两行,比如6500.000,0和60600.000,我希望它们作为结果。希望你能明白 谢谢。使用聚合函数SUM计算每个组,并使用HAVING子句过滤它们 如果要获取未计算的行,可以在子查询中加入它 SELECT a.* FROM TableName a INNER JOIN (

请原谅我的标题。我有一张这样的桌子:

将有数千行,现在我想选择具有相同组id的行,但vr_debit和vr_credit值不能相等:即;,在所示的图像中,没有一行满足此条件。如果有两行,比如6500.000,0和60600.000,我希望它们作为结果。希望你能明白


谢谢。

使用聚合函数SUM计算每个组,并使用HAVING子句过滤它们

如果要获取未计算的行,可以在子查询中加入它

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
也许:

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
   )

您也可以使用此选项

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
              )

演示

不显示图像,而是复制/粘贴样本数据并使用“代码”按钮格式化。这样我们就可以重用示例数据,例如在sql FIDLE中。@Schmelter:谢谢你的建议。以后就行了。
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
              )