2015-09-28 35 views
0

我有表與下面的架構如何找到重複的行,其中4個colums是匹配和3不適

TransNo|TransId|createddate|order|tank|meter|quantity 

我們有第一個3列不同的值,但在接下來的4相同。 我想得到TransNo最後四個(order,tank,meterquantity)是相同的刪除重複項,如果它們存在。

+0

您可以使用GROUP BY TransNO,在查詢訂單數量計。 – Polux2

+0

@Vishal,抱歉,我拒絕了您的修改。那是一個錯誤。我想這是不可能的,以消除拒絕。 –

+0

@Zboson它OK .. np :) – Vishal

回答

0

要只找到TransNo重複的 '最後四':

WITH cte AS (
    SELECT TransNo, COUNT(*) OVER (PARTITION BY [order],tank,meter,quantity) cnt 
    FROM your_table 
) 
SELECT TransNo 
FROM cte 
WHERE cnt>1 

要查看這 '最後四個' 具有相同的 '四強' 和TransNo>分鐘(TransNo)刪除行:

WITH cte AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY [order],tank,meter,quantity ORDER BY TransNo) AS rn 
    FROM your_table) 
DELETE FROM cte 
WHERE rn>1 
0

您可以試試以下查詢。

SELECT * 
    FROM ABC 
WHERE order1 IN (SELECT order1 
        FROM order1 GROUP BY 
        order1 
        HAVING COUNT(TransNo) > 1) 
AND 
tank IN (SELECT tank 
      FROM tank 
     GROUP BY tank 
     HAVING COUNT(TransNo) > 1) 
AND 
meter IN (SELECT meter 
      FROM meter 
      GROUP BY meter 
      HAVING COUNT(TransNo) > 1) 
AND 
quantity IN (SELECT quantity 
       FROM quantity 
       GROUP BY quantity 
      HAVING COUNT(TransNo) > 1) 
+0

您的「注意」不正確。你可以用括號[order]來包圍列名。 – tobypls

+0

@tobypls謝謝.. !!編輯回答:) – Vishal

0

您可以通過使用GROUP BY到一個臨時表選擇重複的值,然後使用該結果彙總TransNo:

SELECT [order], tank, meter, quantity 
INTO #duplicates 
FROM <your table> 
GROUP BY [order], tank, meter, quantity 
HAVING COUNT(*) > 1 

SELECT DISTINCT b.TransNo, c.TransNo --Optional: , b.[order], b.tank, b.meter, b.quantity 
FROM #duplicates a 
INNER JOIN <your table> b ON 
    AND a.[order] = b.[order] 
    AND a.tank = b.tank 
    AND a.meter = b.meter 
    AND a.quantity = b.quantity 
INNER JOIN <your table> c ON 
    AND a.[order] = c.[order] 
    AND a.tank = c.tank 
    AND a.meter = c.meter 
    AND a.quantity = c.quantity 
    AND b.TransNo <> c.TransNo 
+0

我想讓其他行值匹配的兩個trans值。使用重複的臨時表,我可以找到交易號碼,其中計數是超過1,但我需要交易號碼匹配的 –

+0

我不確定你的意思,但嘗試取消註釋「可選」 - 在我的第二部分選擇。這將告訴你哪個TransNo匹配哪些數據。 – tobypls

+0

我的意思是假設第1行中的transno與第2行中的transno匹配,第1行中的值爲1,第2行中的值爲2,所以我需要獲得1,2 –

相關問題