我有表與下面的架構如何找到重複的行,其中4個colums是匹配和3不適
TransNo|TransId|createddate|order|tank|meter|quantity
我們有第一個3列不同的值,但在接下來的4相同。 我想得到TransNo
最後四個(order
,tank
,meter
和quantity
)是相同的刪除重複項,如果它們存在。
我有表與下面的架構如何找到重複的行,其中4個colums是匹配和3不適
TransNo|TransId|createddate|order|tank|meter|quantity
我們有第一個3列不同的值,但在接下來的4相同。 我想得到TransNo
最後四個(order
,tank
,meter
和quantity
)是相同的刪除重複項,如果它們存在。
要只找到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
您可以試試以下查詢。
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)
您可以通過使用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
我想讓其他行值匹配的兩個trans值。使用重複的臨時表,我可以找到交易號碼,其中計數是超過1,但我需要交易號碼匹配的 –
我不確定你的意思,但嘗試取消註釋「可選」 - 在我的第二部分選擇。這將告訴你哪個TransNo匹配哪些數據。 – tobypls
我的意思是假設第1行中的transno與第2行中的transno匹配,第1行中的值爲1,第2行中的值爲2,所以我需要獲得1,2 –
您可以使用GROUP BY TransNO,在查詢訂單數量計。 – Polux2
@Vishal,抱歉,我拒絕了您的修改。那是一個錯誤。我想這是不可能的,以消除拒絕。 –
@Zboson它OK .. np :) – Vishal