我正在写检查特定列的第一行值是否等于另一列的第二行值。
示例:
在上面的示例中,对于订单S1,我正在寻找第二行的ParentProductKey要检查的第一个产品密钥'2'。
如果匹配,则为“是”,否则为“否”。
如果产品密钥与2,3和4相匹配(通常是其余的),那么第一行也应为“是”。
如何实现?
答案 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;