2010-04-21 27 views
2

回覆我的原始查詢,我只是有一個問題(PS:我知道我必須投票和regsiter,我保證我會這樣做今天)如何消除重複的行?

以下查詢(t-sql)我得到正確的結果,除了現在有重複。

我一直在閱讀並認爲我可以使用PARTITION BY語法 - 你能告訴我如何合併PARTITION BY語法嗎?

WITH CALC1 AS (SELECT OTQUOT, OTIT01 AS ITEMS, ROUND(OQCQ01 * OVRC01,2) AS COST 

FROM 

@[email protected] 

WHERE OTIT01 <> '' 

UNION ALL 

... 

SELECT OTQUOT, OTIT10 AS ITEMS, ROUND(OQCQ10 * OVRC10,2) AS COST 

FROM 

@[email protected] 

WHERE OTIT10 <> '' 

) 

SELECT OTQUOT, DESC, ITEMS, RN 

FROM ( 

    SELECT OTQUOT, ITEMS, B.IXRPGP AS GROUP, C.OTRDSC AS DESC, COST, ROW_NUMBER() OVER 

(PARTITION BY OTQUOT ORDER BY COST DESC) AS RN 

    FROM CALC1 AS A INNER JOIN @[email protected] AS B ON (A.ITEMS = B.IKITMC) INNER JOIN 

DATAGRP.GDSGRP AS C ON (B.IXRPGP = C.OKRPGP) 


) T 

結果:

60408169 FENCING GNCPDCTP18BGBG 1

60408169 FENCING CGIFESHPD1795BG 2

60408169 FENCING GTTCGIBG 3

60408169 FENCING GBTCGIBG 4

我該如何擺脫重複? 感謝比爾和您的幫助所有的人(我還在學習!)

回答

1

你可以改變你的分區之前通過向像

(PARTITION BY OTQUOT, C.OTRDSC, ITEMS ORDER BY COST DESC) 

,並創建一個WHERE子句

WHERE RN = 1 

或者你可以簡單地使用一個(SELECT DISTINCT

DISTINCT

指定只有唯一行可以在結果集中出現 。對於DISTINCT關鍵字的目的 ,空值 被認爲是相等的。

SELECT DISTINCT OTQUOT, DESC, ITEMS 

而且,作爲一個想法之後,爲什麼你,你是不是在你的輸出使用SUB選擇選課欄選擇(B.IXRPGP AS GROUP)?