SQL Присоединиться только к 1 строке - SQL Server 2005 - PullRequest
2 голосов
/ 19 февраля 2010

У меня есть таблица AllocatedStock, содержащая номер дела (известный как TPND) и количество. Мне нужно выбрать список запаса товара, но представить его с номером товара (известный как TPNB), а не с номером дела. У меня также есть таблица ProductLookup, которая содержит все TPNB и TPND.

AllocatedStock
Идентификатор AllocatedStockID
TPND int
Количество int

ProductLookup
Идентификатор ProductLookupID
TPND int
TPNB int

Существует несколько типов продуктов (TPNB), которые могут быть предоставлены в нескольких типах случаев (TPND). Этот требуемый результат - общее количество каждого вида продукта, который я использовал, я использовал функцию sum () следующим образом:

select TPNB, sum(AllocatedQty) as 'QTY'
from integration.ProductLookup as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by TPNB

К сожалению, таблица ProductLookup содержит несколько повторяющихся строк (исторические неверные данные, которые невозможно очистить), где строка содержит те же TPND и TPNB, что и другая строка. Единственное, для чего мне нужно присоединиться к таблице ProductLookup, - это получить TPNB для TPND, который у меня есть в таблице AllocatedStock. Есть ли способ получить объединение, чтобы выбрать только 1-й матч? Проблема, с которой я столкнулся в настоящее время, заключается в том, что для TPND, в которых есть повторяющаяся строка в таблице ProductLookup, я получаю двойное значение количества.

Буду благодарен за любую помощь,

Спасибо

Rob.

Ответы [ 4 ]

3 голосов
/ 19 февраля 2010

SELECT DISTINCT должен сделать это:

select TPNB, sum(AllocatedQty) as 'QTY'
from (SELECT DISTINCT TPND, TPNB FROM integration.ProductLookup) as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by TPNB
2 голосов
/ 19 февраля 2010

Дайте этому водоворот.Я использую производный запрос для «очистки» вашей таблицы productlookup.

 select TPNB, sum(AllocatedQty) as 'QTY'
    from (select distinct TPND, TPNB from integration.ProductLookup) as PL 
    inner join  dbo.AllocatedStock as AStock
    on PL.TPND = AStock.TPND
    group by TPNB
0 голосов
/ 19 февраля 2010
select TPNB, sum(AllocatedQty) as 'QTY'
from 
(
    SELECT TPND, TPNB
    FROM ProductLookup
    GROUP BY TPND, TPNB
) as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by TPNB
0 голосов
/ 19 февраля 2010
select distinct tpnb, qty
from (
select TPNB, sum(AllocatedQty) as 'QTY'
from integration.ProductLookup as PL 
inner join  dbo.AllocatedStock as AStock
on PL.TPND = AStock.TPND
group by ProductLookupID ) a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...