检查从第二位置sql server开始的另一列值中是否存在列值
我写这篇文章是为了检查某一列的第一行值是否等于另一列的第二行值 例如: 在上面的示例中,对于订单S1,我正在寻找第一个产品密钥“2”与第二行的ParentProductKey进行检查 如果匹配,则为“是”,否则为“否” 此外,如果产品密钥与2、3和4匹配(通常为其余),则第一行也应为“是”检查从第二位置sql server开始的另一列值中是否存在列值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我写这篇文章是为了检查某一列的第一行值是否等于另一列的第二行值 例如: 在上面的示例中,对于订单S1,我正在寻找第一个产品密钥“2”与第二行的ParentProductKey进行检查 如果匹配,则为“是”,否则为“否” 此外,如果产品密钥与2、3和4匹配(通常为其余),则第一行也应为“是” 如何实现这一点?您可以使用如下语法: WITH CTE AS -- end previous statement with semi colon. ( SELECT *, CASE WH
如何实现这一点?您可以使用如下语法:
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
假设您只想查看表的ParentProduct列中是否存在rows ProductKey,则此查询将起作用。它只需做一个exist检查,看看它是否存在,但它不会考虑顺序。如果要检查是否有一行/多行的ProductKey与该特定顺序的ParentProduct列中的一行/多行相匹配,请在子查询中添加按顺序联接
SELECT *,
case
when EXISTS(Select 1 from ORDERS t2 where t2.ParentProductKey = t1.ProductKey) then 'YES' else 'NO' end as Result
FROM ORDERS t1
您似乎想要
应用:
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;
第二行与父产品列第2行一样,只需在存在(…)的地方执行一个简单的,
条件您的示例有点误导。对于ProductKey为3、4和5的行,它们有“是”,但不应该有“否”吗?(如果我们假设表中没有ParentProductKey为3,4,5的条目)Hi Holder,一个小的修改。对于父产品的第一行,查询也应该说是。但只有第一行。@Shivang请用新信息编辑您的问题,并添加一些预期结果。@Shivang我可能没有正确理解您,但我相信我的查询是按照您所说的进行的。虽然您的代码可能作为答案进行了更正,但详细说明了代码的作用,它可以提高您答案的质量。查看文章:@LuFFy谢谢你的评论。我对我的回答作了解释