2013-03-28 5 views
1
SELECT 
    ij.IJITEM AS Part, 
    ij.IJLOC AS Location, 
    ib.IFQOH AS QOH, 
    MAX(ij.IJDATE) AS Inv_Date 
FROM 
    dbo.S2K_IJALL ij 
    LEFT OUTER JOIN dbo.S2K_IB ib 
    ON ib.IFITEM = ij.IJITEM AND ib.IFLOC = ij.IJLOC 
WHERE 
    IJITEM LIKE '%-IC' 
AND 
    IJRBAL < 0 
GROUP BY 
    ij.IJITEM, 
    ij.IJLOC, 
    ib.IFQOH 

Мне нужно добавить поле к запросу выше. Когда я это делаю, поле даты MAX не поддерживается. Я получаю каждую запись, где добавленное поле имеет значение. Как я могу просто отменить значение для этого поля для даты MAX?MAX Дата группирования неадекватно

+1

Какую версию SQL Server вы используете? –

+0

SQL Server 2012 – tsqln00b

ответ

0

Присоедините запрос к таблице, содержащей новое поле в поле ключа, а также IJDate = Inv_Date, что на самом деле является MAX (IJDATE). Выделите все поля из первого запроса, а также новое поле.

+0

Что делать, если есть связи? –

+0

Я не уверен, как обращаться с галсами. Поле, которое нужно добавить в SELECT, - IJRBAL. Мне нужно это самое текущее значение для этого поля. – tsqln00b

0

Если у вас есть дополнительные столбцы, которые вы хотите добавить, и результат становится поддатый, когда вы GROUP BY, вы можете изменить запрос, чтобы использовать подзапрос:

select ij.IJITEM AS Part, 
    ij.IJLOC AS Location, 
    ib.IFQOH AS QOH, 
    ij2.ijdate Inv_date, 
    --- add other columns 
from dbo.S2K_IJALL ij1 
inner join 
(
    select MAX(IJDATE) ijdate, IJITEM, IJLOC 
    from dbo.S2K_IJALL 
    WHERE IJITEM LIKE '%-IC' 
    AND IJRBAL < 0 
    group by IJITEM, IJLOC 
) ij2 
    on ij1.ijdate = ij2.ijdate 
    and ij1.IJITEM = ij2.IJITEM 
    and ij1.IJLOC = ij2.IJLOC 
LEFT OUTER JOIN dbo.S2K_IB ib 
    ON ib.IFITEM = ij1.IJITEM 
    AND ib.IFLOC = ij1.IJLOC 
WHERE ij1.IJITEM LIKE '%-IC' 
    AND ij1.IJRBAL < 0 
0

Предполагая, что SQL Server 2005 или более поздней версии (пожалуйста, всегда указывать Ваша версия):

;WITH x AS 
(
    SELECT 
    ij.IJITEM AS Part, 
    ij.IJLOC AS Location, 
    ib.IFQOH AS QOH, 

    -- any other non-grouping column(s) can go here, 

    ij.IJDATE AS Inv_date, 
    rn = ROW_NUMBER() OVER (PARTITION BY 
     ij.IJITEM, ij.IJLOC, ib.IFQOH ORDER BY ij.IJDATE DESC) 
    FROM 
    dbo.S2K_IJALL ij 
    LEFT OUTER JOIN dbo.S2K_IB ib 
    ON ib.IFITEM = ij.IJITEM AND ib.IFLOC = ij.IJLOC 
    WHERE IJITEM LIKE '%-IC' 
    AND IJRBAL < 0 
) 
SELECT Part, Location, QOH, Inv_date 
    FROM x WHERE rn = 1; 

Вам может понадобиться, чтобы сказать нам, как вы хотите обрабатывать связи, там может быть несколько строк с одной и той же группировкой и той же максимальной (дата), но с разными значениями столбца (s) вы хотите добавить ...

Смежные вопросы