我有以下问题。我有3种不同状态的产品。父母,儿童和孤儿产品。我将父母设为1,将儿童设为2,将孤儿设为0.我正在努力让孤儿设置为0.我意识到计算父PLU的数量是我出错的地方但我不知道如何解决这个问题。任何帮助,将不胜感激。 (你可能会说,我是一个菜鸟,建设性的批评将不胜感激)
亲切的问候, 杰森。
declare @OrderID int = 1635
declare @Store char(3) = '001'
declare @SortedBy smallint = 2
DECLARE @tbl TABLE (DetailID int, OrderID int, PLU nvarchar(35), ParentPLU nvarchar(35))
INSERT INTO @tbl (DetailID, OrderID, PLU, ParentPLU)
SELECT DetailID, OrderDetails.OrderID, OrderDetails.PLU, OrderDetails.ParentPLU
FROM OrderDetails
INNER JOIN PLU
ON PLU.PLU = OrderDetails.PLU
WHERE OrderDetails.OrderID = @OrderID
AND OrderDetails.OrderStore = @Store
SELECT DetailID, OrderID, PLU, ParentPLU,
CASE WHEN ( SELECT COUNT(DISTINCT ParentPLU)
FROM @tbl
WHERE ParentPLU IN (SELECT PLU FROM @tbl)
) > 0 AND ParentPLU = '' THEN 1
WHEN ( SELECT COUNT(DISTINCT ParentPLU)
FROM @tbl
WHERE ParentPLU IN (SELECT PLU FROM @tbl)
) > 0 THEN 2
ELSE
0
END AS ParentChild,
ROW_NUMBER() OVER (ORDER BY
CASE WHEN @SortedBy = 1 THEN OrderID END ASC,
CASE WHEN @SortedBy = 2 THEN DetailID END ASC
) AS ID
FROM @tbl
答案 0 :(得分:0)
您可以使用coalesce
来获得所需的结果。第一个子查询检查父状态,第二个检查子项。如果两者都为null,那么它是孤立的
select
DetailID, OrderID, PLU, ParentPLU
, coalesce((
select
distinct 1
from
@tbl b
where
a.PLU = b.ParentPlu
)
, (
select
distinct 2
from
@tbl b
where
b.PLU = a.ParentPlu
), 0)
from
@tbl a