检查从第二个位置sql server开始的另一个列值中是否存在一个列值

时间:2018-08-31 06:16:40

标签: sql sql-server sql-server-2008

我正在写检查特定列的第一行值是否等于另一列的第二行值。

示例:

enter image description here

在上面的示例中,对于订单S1,我正在寻找第二行的ParentProductKey要检查的第一个产品密钥'2'。

如果匹配,则为“是”,否则为“否”。

如果产品密钥与2,3和4相匹配(通常是其余的),那么第一行也应为“是”。

如何实现?

3 个答案:

答案 0 :(得分:0)

您可能会使用如下语法:

WITH CTE AS  -- end previous statement with semi colon.
(
    SELECT *, 
    CASE WHEN C2.SomeColumn = C.SomeColumn THE AS ELSE B END AS Comparison
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNumb
)

SELECT C.*, 
FROM CTE AS C
LEFT JOIN CTE AS C2 ON C.RowNumb = C2.RowNumb - 1

答案 1 :(得分:0)

假设您只想查看表的ParentProduct列中是否存在ProductKey行,此查询将起作用。它只会做一个存在检查,以查看它是否确实存在,但不会考虑Order。如果要检查是否有一个/多行具有与该特定订单的ParentProduct列中的一个/很多行相匹配的ProductKey,请在子查询中的Order上添加一个联接。

 SELECT *, 
 case 
    when EXISTS(Select 1 from ORDERS t2 where t2.ParentProductKey = t1.ProductKey) then 'YES' else 'NO' end as Result
 FROM ORDERS t1

答案 2 :(得分:0)

您似乎想要APPLY

SELECT t.*, (CASE WHEN t.ProductKey = t1.ParentProductKey THEN 'Yes' ELSE 'No' END) AS Result
FROM table t OUTER APPLY
     ( SELECT TOP (1) t1.*
       FROM table t1
       WHERE t1.sid = t.sid and t1.ProductKey > t.ProductKety
       ORDER BY t1.ProductKey 
     ) t1;