Sql 或者每个Part_ID?Update-我发现我似乎可以用我帖子中的原始查询(减去orderby)替换联合部分,并得到我正在寻找的结果。我添加了完成报告所需的附加列,似乎我不必使用您的解决方案从报告构建中的2个数据集编译它!非常感谢你!!!我已经将最终查询更
Sql 或者每个Part_ID?Update-我发现我似乎可以用我帖子中的原始查询(减去orderby)替换联合部分,并得到我正在寻找的结果。我添加了完成报告所需的附加列,似乎我不必使用您的解决方案从报告构建中的2个数据集编译它!非常感谢你!!!我已经将最终查询更,sql,reporting-services,Sql,Reporting Services,或者每个Part_ID?Update-我发现我似乎可以用我帖子中的原始查询(减去orderby)替换联合部分,并得到我正在寻找的结果。我添加了完成报告所需的附加列,似乎我不必使用您的解决方案从报告构建中的2个数据集编译它!非常感谢你!!!我已经将最终查询更新为顶部的问题!!!嘿,哈利,这看起来棒极了!但是我有一个问题-对于我想要获得第二行返回的每个零件号,我是否必须在每个零件ID的联合部分中添加特定信息?更新-我发现我似乎可以用我的帖子中的原始查询(减去orderby)替换联合部分,并获得我正在
或者每个Part_ID?Update-我发现我似乎可以用我帖子中的原始查询(减去orderby)替换联合部分,并得到我正在寻找的结果。我添加了完成报告所需的附加列,似乎我不必使用您的解决方案从报告构建中的2个数据集编译它!非常感谢你!!!我已经将最终查询更新为顶部的问题!!!嘿,哈利,这看起来棒极了!但是我有一个问题-对于我想要获得第二行返回的每个零件号,我是否必须在每个零件ID的联合部分中添加特定信息?更新-我发现我似乎可以用我的帖子中的原始查询(减去orderby)替换联合部分,并获得我正在寻找的结果。我添加了完成报告所需的附加列,似乎我不必使用您的解决方案从报告构建中的2个数据集编译它!非常感谢你!!!我已经将最终查询更新为顶部的问题!!!
SELECT
PURCHASE_ORDER.ORDER_DATE
, PURC_ORDER_LINE.PART_ID
, PURCHASE_ORDER.VENDOR_ID
, PURC_ORDER_LINE.LINE_STATUS
, PURC_ORDER_LINE.ORDER_QTY
, PURC_ORDER_LINE.UNIT_PRICE
--, ROW_NUMBER() over (ORDER BY PURCHASE_ORDER.ORDER_DATE DESC)AS ROW
, CAST (PURC_ORDER_LINE.ORDER_QTY * PURC_ORDER_LINE.UNIT_PRICE AS VARCHAR) AS TOTAL_COST
FROM
PURCHASE_ORDER
INNER JOIN
PURC_ORDER_LINE
ON
PURCHASE_ORDER.ID = PURC_ORDER_LINE.PURC_ORDER_ID
WHERE PURCHASE_ORDER.ORDER_DATE < (SELECT MAX(ORDER_DATE) FROM PURCHASE_ORDER) AND PURC_ORDER_LINE.PART_ID = 'XXXX'
ORDER BY ORDER_dATE DESC
--WHERE PURC_ORDER_LINE.PART_ID = 'XXXX' and PURCHASE_ORDER.ORDER_DATE = (SELECT MAX(ORDER_DATE) FROM PURCHASE_ORDER WHERE ORDER_DATE < (SELECT MAX(ORDER_DATE) FROM PURCHASE_ORDER))
+-------------+---------+-----------+
| ORDER_DATE | PART_ID | VENDOR_ID |
+-------------+---------+-----------+
| 2020-05-29 | XXXX | CVVB |
| 2020-05-27 | XXXX | CVVB |
| 2020-05-28 | XXXX | CVVA |
| 2020-05-28 | YYYY | GGNB |
| 2020-04-12 | YYYY | GGNB |
| 2020-02-08 | YYYY | GGNB |
| 2020-05-28 | ZZZZ | LLNB |
| 2019-10-28 | ZZZZ | LLNB |
| 2019-05-27 | ZZZZ | OKIJ |
+-------------+---------+-----------+
+------------+---------+-----------+
| ORDER_DATE | PART_ID | VENDOR_ID |
+------------+---------+-----------+
| 2020-05-28 | XXXX | CVVA |
| 2020-04-12 | YYYY | GGNB |
| 2019-10-28 | ZZZZ | LLNB |
+------------+---------+-----------+
+------------+---------+-----------+-------------+----------+------------+
| ORDER_DATE | PART_ID | VENDOR_ID | Porder_Date | Ppart_ID | pVendor_id |
+------------+---------+-----------+-------------+----------+------------+
| 2020-05-29 | XXXX | CVVB | 2020-05-28 | XXXX | CVVA |
| 2020-05-28 | YYYY | GGNB | 2020-04-12 | YYYY | GGNB |
| 2020-05-28 | ZZZZ | LLNB | 2019-10-28 | ZZZZ | LLNB |
+------------+---------+-----------+-------------+----------+------------+
;
WITH mycte AS
(
SELECT
PURCHASE_ORDER.ORDER_DATE
, PURC_ORDER_LINE.PART_ID
, PURCHASE_ORDER.VENDOR_ID
, PURC_ORDER_LINE.LINE_STATUS
, PURC_ORDER_LINE.ORDER_QTY
, PURC_ORDER_LINE.UNIT_PRICE
, CAST (PURC_ORDER_LINE.ORDER_QTY * PURC_ORDER_LINE.UNIT_PRICE AS VARCHAR) AS TOTAL_COST
FROM
PURCHASE_ORDER
INNER JOIN
PURC_ORDER_LINE
ON
PURCHASE_ORDER.ID = PURC_ORDER_LINE.PURC_ORDER_ID
)
, mycte2 AS
(
SELECT
CONVERT(DATE,order_date) AS order_date
, part_id
, vendor_id
, order_qty
, unit_price
, total_cost
, ROW_NUMBER() over(
PARTITION BY part_id
ORDER BY
CONVERT(DATE,order_date) DESC) AS row_num
FROM
mycte
)
SELECT
mycte2.order_date
, mycte2.part_id
, mycte2.vendor_id
, mycte2.order_qty
, mycte2.unit_price
, mycte2.total_cost
, previous.order_date porder_date
, previous.part_id ppart_id
, previous.vendor_id pvendor_id
, previous.order_qty poqrder_qty
, previous.unit_price punit_price
, previous.total_cost ptotal_cost
FROM
mycte2
LEFT JOIN
mycte2 previous
ON
previous.row_num = mycte2.row_num +1
AND mycte2.part_id = previous.part_id
WHERE
mycte2.row_num = 1
;WITH cteOrders AS (
SELECT ROW_NUMBER() OVER (ORDER BY Order_Date DESC) AS row_num,
PURCHASE_ORDER.ORDER_DATE
, PURC_ORDER_LINE.PART_ID
, PURCHASE_ORDER.VENDOR_ID
, PURC_ORDER_LINE.LINE_STATUS
, PURC_ORDER_LINE.ORDER_QTY
, PURC_ORDER_LINE.UNIT_PRICE
FROM PURCHASE_ORDER
INNER JOIN PURC_ORDER_LINE ON PURCHASE_ORDER.ID = PURC_ORDER_LINE.PURC_ORDER_ID
WHERE PURCHASE_ORDER.ORDER_DATE < (SELECT MAX(ORDER_DATE) FROM PURCHASE_ORDER) AND PURC_ORDER_LINE.PART_ID = 'XXXX'
)
SELECT * FROM cteOrders WHERE row_num = 2
;with mycte as (
select
'2020-05-29' as order_date , 'XXXX' as part_id , 'CVVB' as vendor_id
union all select
'2020-05-27' , 'XXXX' , 'CVVB'
union all select
'2020-05-28' , 'XXXX' , 'CVVA'
union all select
'2020-05-28' , 'YYYY' , 'GGNB'
union all select
'2020-04-12' , 'YYYY' , 'GGNB'
union all select
'2020-02-08' , 'YYYY' , 'GGNB'
union all select
'2020-05-28' , 'ZZZZ' , 'LLNB'
union all select
'2019-10-28' , 'ZZZZ' , 'LLNB'
union all select
'2019-05-27' , 'ZZZZ' , 'OKIJ'
)
, mycte2 as (
Select
convert(date,order_date) as order_date
,part_id
,vendor_id
,ROW_NUMBER() over( partition by part_id order by convert(date,order_date) desc) as row_num
from mycte
)
Select
mycte2.order_date
,mycte2.part_id
,mycte2.vendor_id
,previous.order_date porder_date
,previous.part_id ppart_id
,previous.vendor_id pvendor_id
from mycte2
left join mycte2 previous
on previous.row_num = mycte2.row_num +1
and mycte2.part_id = previous.part_id
where mycte2.row_num = 1