Как устранить дублирующиеся строки? - PullRequest
2 голосов
/ 21 апреля 2010

я вернулся с моим исходным запросом, и у меня есть только один вопрос, пожалуйста (ps: я знаю, что должен проголосовать и зарегистрируйтесь, и я обещаю, что сделаю это сегодня)

Со следующим запросом (t-sql) Я получаю правильные результаты, за исключением того, что сейчас есть дубликаты.

Я читал и думаю, что могу использовать синтаксис PARTITION BY - не могли бы вы показать мне, как включить синтаксис PARTITION BY?

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

FROM 

@LIB@.RTQOTA

WHERE OTIT01 <> ''

UNION ALL

...

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

FROM 

@LIB@.RTQOTA

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 @LIB@.ITMCON AS B ON (A.ITEMS = B.IKITMC) INNER JOIN 

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


) T 

РЕЗУЛЬТАТЫ:

60408169 Фехтование GNCPDCTP18BGBG 1

60408169 Фехтование CGIFESHPD1795BG 2

60408169 * ФЕНСИРОВАНИЕ GTTCG6169169Фехтование GBTCGIBG 4

Как мне избавиться от дубликатов?спасибо Биллу и всем остальным за вашу помощь (я все еще учусь!)

1 Ответ

1 голос
/ 21 апреля 2010

Вы можете изменить PARITION BY на что-то вроде

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

и создайте WHERE CLAUSE

WHERE RN = 1

или вы можете просто использовать ( SELECT DISTINCT )

DISTINCT

Указывает, что только уникальные строки могут появляются в наборе результатов. Нулевые значения считаются равными для целей ключевого слова DISTINCT.

SELECT DISTINCT OTQUOT, DESC, ITEMS

Кроме того, после размышлений, почему вы выбираете столбцы в SUB SELECt, которые вы не используете в выходных данных select (B.IXRPGP AS GROUP)?

...