SQL Server на корневом уровне в SQL Server - PullRequest
0 голосов
/ 06 июля 2018

У меня есть этот тип столбца data.copied_from_prod_id для хранения значения prod_id при выполнении новой транзакции.

business_id   prod_id   copied_from_prod_id
6882           8172         NULL
7565           8867         8172
7572           8874         8867
15156          16859        8874
18513          20405        16859
35348          38184        20405

Теперь я хочу искать данные на корневом уровне. например, я передаю два параметра business_id с именами old_business_id и new_business_id в качестве параметра.

old_business_id = 6882 и new_business_id = 18513 вывод должен быть

business_id   prod_id   copied_from_prod_id   latest_prod_id 
6882           8172         NULL                20405

теперь, когда old_business_id = 7565 и new_business_id = 35348 вывод должен быть

business_id   prod_id   copied_from_prod_id  latest_prod_id
7572           8874         8867                38184

теперь, когда old_business_id = 6882 и new_business_id = 35348, вывод должен быть

business_id   prod_id   copied_from_prod_id  latest_prod_id
6882           8172         NULL                38184

я могу сделать это, используя цикл и курсор, но я хочу получить результат без циклов и курсора

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Это будет работать:

DECLARE @old_business_id INT = 7565;
DECLARE @new_business_id INT = 35348;

WITH OldBusinessData
AS (
    SELECT *
    FROM data
    WHERE business_id = @old_business_id
    )
    ,NewBusinessData
AS (
    SELECT prod_id
    FROM data
    WHERE business_id = @new_business_id
    )
SELECT *
FROM OldBusinessData
    ,NewBusinessData
0 голосов
/ 06 июля 2018

Это то, что вы хотите?

declare @old_business_id int=6882 
declare @new_business_id int=18513 

select o.business_id,o.prod_id,o.copied_from_prod_id,n.business_id
from yourtable o -- o for old
cross join yourtable n -- n for new
where o.business_id=@old_business_id
and n.business_id=@new_business_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...