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 日付のそのフィールドの値を元に戻すにはどうすればよいですか?

4

3 に答える 3

0

上記のクエリを、キー フィールドの新しいフィールドと、実際には MAX(IJDATE) である IJDate = Inv_Date を含むテーブルに結合します。最初のクエリのすべてのフィールドと新しいフィールドを選択します。

于 2013-03-28T20:58:09.197 に答える
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
于 2013-03-28T20:59:42.173 に答える
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;

同じグループ化と同じ max(date) を持つが、追加する列の値が異なる複数の行が存在する可能性があります...

于 2013-03-28T21:08:34.353 に答える