sql比较列以获得结果

时间:2018-02-14 17:30:56

标签: tsql

我有以下问题。我有3种不同状态的产品。父母,儿童和孤儿产品。我将父母设为1,将儿童设为2,将孤儿设为0.我正在努力让孤儿设置为0.我意识到计算父PLU的数量是我出错的地方但我不知道如何解决这个问题。任何帮助,将不胜感激。 (你可能会说,我是一个菜鸟,建设性的批评将不胜感激)

亲切的问候, 杰森。

Picture of results from query

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

1 个答案:

答案 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