Create a stored procedure to display rows with a connected column value from another column

Viewed 55

I have this SQL Server database already stored

ID  |  TaxDecNo  |  OwnerName  |   PrevTaxDec
----------------------------------------------
1   |  5374      |  John       |   11135
2   |  9864      |  Doe        |   7394
3   |  11135     |  John       |   21784
4   |  7394      |  Doe        |   6872
5   |  21784     |  John       |   NULL
6   |  6872      |  Doe        |   NULL

When I'm going to display ID 3

ID  |  TaxDecNo  |  OwnerName  |   PrevTaxDec
----------------------------------------------
1   |  5374      |  John       |   11135
3   |  11135     |  John       |   21784
5   |  21784     |  John       |   NULL

When I'm going to display RecordID 2

ID  |  TaxDecNo  |  OwnerName  |   PrevTaxDec
----------------------------------------------
2   |  9864      |  Doe        |   7394
4   |  7394      |  Doe        |   6872
6   |  6872      |  Doe        |   NULL

The display only stop when no PrevTaxDec connects TaxDec No value.

I got this solution given to me a while but I don't know how to convert it to stored procedure which the data is already inserted the table

DECLARE @ID int = 3;

WITH YourTable AS(
    SELECT V.ID,
           V.TaxDecNo,
           V.PrevTaxDec
    FROM (VALUES(1,5374,11135),  --This value must already inserted in the table
                (2,9864,7394),
                (3,11135,21784),
                (4,7394,6872),
                (5,21784,NULL), --I assume you aren't really mixing datatyoes. 'N/A' can't be inserted into an int column
                (6,6872,NULL))V(ID,TaxDecNo,PrevTaxDec)),
--Solution
rCTEup AS(
    SELECT YT.ID,
           YT.TaxDecNo,
           YT.PrevTaxDec
    FROM YourTable YT
    WHERE YT.ID = @ID
    UNION ALL
    SELECT YT.ID,
           YT.TaxDecNo,
           YT.PrevTaxDec
    FROM rCTEup r
         JOIN YourTable YT ON r.TaxDecNo = YT.PrevTaxDec),
rCTEdown AS(
    SELECT YT.ID,
           YT.TaxDecNo,
           YT.PrevTaxDec
    FROM YourTable YT
    WHERE YT.ID = @ID
    UNION ALL
    SELECT YT.ID,
           YT.TaxDecNo,
           YT.PrevTaxDec
    FROM rCTEdown r
         JOIN YourTable YT ON r.PrevTaxDec = YT.TaxDecNo)
SELECT ID,
       TaxDecNo,
       PrevTaxDec
FROM rCTEup
UNION ALL
SELECT ID,
       TaxDecNo,
       PrevTaxDec
FROM rCTEdown
WHERE ID != @ID; --As it'll be in rCTEup
0 Answers
Related