Мне нужна помощь с моим запросом ... Я не хочу, чтобы получить идентификаторы trade, которые являются дубликатами и отсутствуют LegId. Не могли бы вы мне помочь?Извлеките дубликаты из XML
Мой XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<value>
<TradeId>928</TradeId>
<LegId>1</LegId>
</value>
<value>
<TradeId>928</TradeId>
<LegId>2</LegId>
</value>
<value>
<TradeId>928</TradeId>
//MISSING LEGID HERE
</value>
<value>
<TradeId>929</TradeId>
<LegId>1</LegId>
</value>
<value>
<TradeId>929</TradeId>
<LegId>2</LegId>
</value>
<value>
<TradeId>930</TradeId>
<LegId>2</LegId>
</value>
</data>
Im объявляя этот XML в переменную, а затем заполнение #temptable с результатом:
SELECT *
INTO #tradeIdDuplicatesToIgnore
FROM
(
SELECT
e.value('TradeId[1]','varchar(50)') AS strTradeId
,e.value('LegId[1]','int') AS LegId
FROM @xmlData.nodes('data/value') AS elements(e)
WHERE 1 = 1
) AS t
SELECT *
FROM #tradeIdDuplicatesToIgnore AS t
Это дает мне следующий вывод:
Единственная строка, в которой я не была в этом случае, - это номер 3, тот, который отмечен желтым цветом (мне нужен только столбец TradeId). Этот запрос:
SELECT t.strTradeId
INTO #tradeIdDuplicatesToIgnore
FROM
(
SELECT
e.value('TradeId[1]','varchar(50)') AS strTradeId
,e.value('LegId[1]','int') AS LegId
FROM @xmlData.nodes('data/value') AS elements(e)
) AS t
WHERE 1 = 1
--AND t.LegId IS NULL
GROUP BY t.strTradeId
HAVING COUNT(t.strTradeId) > 1
SELECT *
FROM #tradeIdDuplicatesToIgnore AS t
И это оставляет меня с двумя рядами с 928 и 929, но я не могу получить один были LegId IS NULL ...
Запрошенный выход из этого случая: один с TradeId 928.
Не могли бы вы помочь мне в этом?
вы пытались 'DISTINCT'? – DLeh