請原諒我的標題。我有這樣一個表:選擇具有兩個字段的dstinct值的行
將有成千上萬行的,現在我要選擇具有相同GROUP_ID但vr_debit和vr_credit值不能等於行:圖像中即;,如圖所示,沒有任何行滿足這個標準。如果有兩行,例如(6,500.000,0)和(6,0,600.000),我希望它們作爲結果。希望你明白這個主意。
謝謝。
請原諒我的標題。我有這樣一個表:選擇具有兩個字段的dstinct值的行
將有成千上萬行的,現在我要選擇具有相同GROUP_ID但vr_debit和vr_credit值不能等於行:圖像中即;,如圖所示,沒有任何行滿足這個標準。如果有兩行,例如(6,500.000,0)和(6,0,600.000),我希望它們作爲結果。希望你明白這個主意。
謝謝。
使用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
也許:
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
)
在這裏演示(thx到JW):http://www.sqlfiddle.com/#!3/b0fb1/1/0 –
您也可以使用此選項
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
不顯示圖像,但複製/粘貼示例數據並使用代碼按鈕進行格式化。這樣我們就可以重用樣本數據,例如在sql-fiddle中。 –
@Schmelter:謝謝你的建議。將來會做。 – Sharun