对于每个OrderID,需要检查PartID-A的DueDate是否具有早于PartID-B的DueDate。
行分组可以使用OVER(PARTITION)来比较所有具有相同OrderID的行。不幸的是,到目前为止,甚至还没有成功。
字段比较不确定self-join是否用于根据其他字段(PartID)比较一个字段(DueDate)。语法似乎不允许这样的用法。
使用SQL 2012
此查询提取数据,但不进行分组,也不进行日期比较。
SELECT
SALES_DOC_NUM AS [OrderID]
--, MAX(SALES_DOC_NUM) OVER(PARTITION BY SALES_DOC_NUM)
, RTRIM(SHIP_TO_ADDRESS_CODE) AS [ShipToID]
, ITEM_NUMBER AS [PartID]
, CONVERT(VARCHAR(17), REQ_SHIP_DATE, 110) AS [DueDate]
FROM SPV3SALESLINEITEM
WHERE (ITEM_NUMBER = '1RC-AM'
OR ITEM_NUMBER = '1RC-DCR')
GROUP BY SALES_DOC_NUM, ITEM_NUMBER, SHIP_TO_ADDRESS_CODE, REQ_SHIP_DATE
ORDER BY SALES_DOC_NUM;
来自查询的表数据。
OrderID ShipToID PartID DueDate
SO003590 1614 DR 04-11-2016
SO003591 0532 AM 02-25-2016
SO003591 0532 DR 05-16-2016
SO003592 0812 AM 02-15-2016
SO003592 0812 DR 04-25-2016
SO003593 2216 AM 04-11-2016
SO003593 2216 AM 09-12-2016
SO003593 2216 DR 04-11-2016
SO003594 1411 AM 02-11-2016
SO003594 1411 DR 03-21-2016
SO003596 1065 AM 02-04-2016
SO003596 1065 DR 06-06-2016
SO003597 0504 AM 02-04-2016
SO003597 0504 DR 06-06-2016
答案 0 :(得分:1)
让我做出以下假设:
PartId
" A"比DueDate
" B"。PartId
您可以使用条件聚合执行此操作:
select sales_doc_num,
max(case when partid = 'A' then duedate end) as a_duedate,
max(case when partid = 'B' then duedate end) as b_duedate
from SPV3SALESLINEITEM si
group by sales_doc_num
having max(case when partid = 'A' then duedate end) > max(case when partid = 'B' then duedate end);
我不太确定这与帖子中的查询如何相符,而该帖子中还有其他列和条件不在问题中。