2010-04-21 46 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)?