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

时间:2013-04-02 11:58:34

标签: sql sql-server sql-server-2008 join

请原谅我的头衔。我有一张这样的桌子:

enter image description here

将有数千行,现在我想选择具有相同group_id的行,但vr_debit和vr_credit值不能相等:ie;,在所示图像中,没有一行满足此条件。如果有两行,比如(6,500.000,0)和(6,0,600.000),我希望它们作为结果。希望你明白这个主意。

谢谢。

3 个答案:

答案 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上的演示