Проверьте, существует ли значение столбца в значениях другого столбца, начиная со второй позиции SQL Server - PullRequest
0 голосов
/ 31 августа 2018

Я пишу, чтобы проверить, равно ли значение первой строки определенного столбца значению второй строки другого столбца.

Пример:

enter image description here

В приведенном выше примере для заказа S1 я ищу первый ключ продукта '2' для проверки с помощью ParentProductKey из второй строки.

Если он совпадает, то «ДА», иначе «НЕТ».

Также, если ключ продукта совпадает с 2,3 и 4 (в общем случае с остальными), то в первой строке также должно быть указано «ДА».

Как этого достичь?

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Предполагая, что вы только хотите увидеть, существуют ли строки ProductKey в столбце ParentProduct таблицы, этот запрос будет работать. Он просто выполнит проверку существования, чтобы увидеть, существует ли он, но не примет во внимание Порядок. Если вы хотите проверить, что есть одна / много строк с ProductKey, которые соответствуют одной / нескольким строкам в столбце ParentProduct для этого конкретного заказа, добавьте объединение 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
0 голосов
/ 31 августа 2018

Вы, кажется, хотите 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;
0 голосов
/ 31 августа 2018

Вы можете использовать синтаксис, который выглядит следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...