주문이있는 MS SQL 데이터베이스가 있습니다. orers와 orderrows 두 테이블이 있습니다. 동일한 주문을 가진 모든 주문을 받고 싶습니다. 즉, 정확히 동일한 제품과 수량을 가진 주문을 표시하는 것입니다.자식 행 집합과 정확히 같은 Sql 상위 행을 찾습니다
이
사람이 뜨거운 알고 있나요 : 이것은 다음과 같은 결과를 얻을 수
select t1.orderid, t1.Itemcode, t1.quantity, t1.LineNum, t2.orderid, t2.Itemcode
FROM orderrows t1
LEFT OUTER JOIN orderrows t2 ON t1.itemcode = t2.ItemCode and t1.quantity = t2.Quantity and t2.LineNum = t1.linenum
where t1.orderid <> t2.orderid
order by t1.orderid, t2.orderid
:이 쿼리를 만든
CREATE TABLE [dbo].[orders](
[orderid] [int] NULL
) ON [PRIMARY]
GO
INSERT INTO orders values(1)
INSERT INTO orders values(2)
INSERT INTO orders values(3)
INSERT INTO orders values(4)
CREATE TABLE [dbo].[orderrows](
[orderid] [int] NULL,
[LineNum] [int] NULL,
[Quantity] [decimal](18, 6) NULL,
[ItemCode] [nvarchar](20) NULL
) ON [PRIMARY]
GO
INSERT INTO orderrows values(1,0,11.0,'Item1')
INSERT INTO orderrows values(1,1,12.0,'Item2')
INSERT INTO orderrows values(1,2,13.0,'Item3')
INSERT INTO orderrows values(1,3,14.0,'Item4')
INSERT INTO orderrows values(2,0,11.0,'Item1')
INSERT INTO orderrows values(2,1,12.0,'Item2')
INSERT INTO orderrows values(2,2,13.0,'Item3')
INSERT INTO orderrows values(2,3,14.0,'Item4')
INSERT INTO orderrows values(3,0,11.0,'Item1')
INSERT INTO orderrows values(3,1,12.0,'Item2')
INSERT INTO orderrows values(4,0,15.0,'Item5')
INSERT INTO orderrows values(4,1,16.0,'Item6')
:
테이블과 데이터를 작성 십자가 행을 제거 하시겠습니까? 이 주문은 정확한 일치는 아니지만 주문의 하위 집합 만 있습니다. 예 : 행 5와 6은 순서 3을 표시하지만이 순서는 item1과 item2 만 있습니다.
정확하게 이해하면 각 주문의 전체 행 세트를 다른 전체 세트와 비교해야합니다. 또한 SqlQuery가 비교에서 'LineNum'을 사용하는 반면 '정확히 동일한 제품 및 수량'을 명확히 할 수 있습니까? 'LineNums'가 전환되었지만 Order Items와 Quantities가 동일하면 다른 것으로 간주되는 순서입니다 ? – StuartLC
"같은 순서"의 정의는 내부 토론을 위해 열렸습니다 - 우리는 비교에서 LineNum을 폐기했습니다. 그래서 @StuartLC의 솔루션을 테스트하고 승인했습니다. 감사합니다! – Rollufje
'LineNum'을 믹스에 추가하는 것은 'SELECT ItemCode, Quantity, LineNum ...'과 같이 4x select에 추가하는 것만 큼 쉽습니다. – StuartLC