0

エイリアスを使用してサブクエリを試行しました

SELECT
  *, 
  IQ.EndPart, 
  IQ.QtyToShip 
FROM
  parts p
  INNER JOIN (
     select
       *, 
       (case when c.kitno is null then l.partno else c.partno end) as [EndPart],
       (case when c.kitno is null then l.TotalQuantity else c.reqqty end) as [QtyToShip]
     FROM 
       shipments s
       INNER JOIN shipments_li l ON s.ShipmentNo = l.ShipmentNo 
       LEFT JOIN ProductConfiguration c ON l.PartNo = c.KitNo WHERE s.Status='N' and year(s.OrderDate)>2007
   ) IQ ON p.partno = IQ.EndPart

EndPart としてエイリアス化されたパーツ # を使用して、パーツ テーブルを以下のクエリに結合する方法を探しています。ケースとエイリアスの代わりに2つの列を取り、それらを組み合わせた結果を達成する別の方法がある場合、それも優れた代替手段となります。同じことを達成するために他の個人のクエストをすべて検索した結果、エイリアスに基づいて結合を実行できないという結果が得られました。その時点では結果が決定されていないため、回避策としてサブクエリをお勧めします。作業結果を達成する方法がわかりません。上記のクエリは、私が機能させようとしたものです。どんな助けでも感謝します。前もって感謝します。

元のクエリ

SELECT
  *, 
  (case when c.kitno is null then l.partno else c.partno end) as [EndPart],
  (case when c.kitno is null then l.TotalQuantity else c.reqqty end) as [QtyToShip]
FROM
  shipments s
  INNER JOIN shipments_li l ON s.ShipmentNo = l.ShipmentNo
  LEFT JOIN ProductConfiguration c ON l.PartNo = c.KitNo
WHERE
  s.Status='N'
  and year(s.OrderDate)>2007
order by s.shipmentno
4

1 に答える 1

0

より適切な方法

--- CREATE TempTable
DECLARE @tblTemp AS TABLE (EndPart INT,
                       QtyToShip INT)

INSERT INTO @tblTemp (EndPart, QtyToShip)
SELECT 
       (CASE WHEN c.kitno IS NULL 
             THEN l.partno ELSE c.partno END) AS [EndPart],
       (CASE WHEN c.kitno IS NULL 
            THEN l.TotalQuantity 
            ELSE c.reqqty END) AS [QtyToShip]
FROM dbo.Shipments s WITH(NOLOCK)
INNER JOIN shipments_li l WITH(NOLOCK) ON s.ShipmentNo = l.ShipmentNo 
LEFT JOIN ProductConfiguration c WITH(NOLOCK) ON l.PartNo = c.KitNo 
WHERE s.Status='N' AND YEAR(s.OrderDate)>2007

SELECT
   p.*, 
  tmp.EndPart, 
  tmp.QtyToShip 
FROM dbo.parts p WITH(NOLOCK)
  INNER JOIN @tblTemp tmp ON  p.partno = tmp.EndPart
于 2013-01-14T17:35:33.423 に答える