T-Sql 多个自连接到 return 单个主值

T-Sql multiple self-Joins to return single main value

如果我有一个像下面这样的 table

| COL1 | COL2 | COL3 | COL4 |
-----------------------------
|  A   |  B   | *null* | *null* |
| *null* |  B   |  C   | *null* |
| *null* | *null* |  C   |   D  |

我有一个存储过程,可以像这样接受四个参数

CREATE PROCEDURE [dbo].[usp_Testing]
    @value1 varchar(1) = NULL,
    @value2 varchar(1) = NULL,
    @value3 varchar(1) = NULL,
    @value4 varchar(1) = NULL

如果一次只传入一个值,我想从 COL1 中获取值 A 例如如果@value4 传递了值 'D' 那么我想通过自连接第 3 行 D 来获得 A 这样我们就可以得到 C 得到 row2 C 得到使用 B 得到 row1 得到我们 A 目前我做了类似的事情(手写所以可能不完全运行)这个

DECALRE @use varchar(1)
IF(@Value1 IS NOT NULL OR @Value2 IS NOT NULL)
    SELECT TOP 1 @Use = COL1 FROM TAB t1 
    WHERE COL1 = @Value1 or COL2 = @Value2
ELSE IF (@Value3 IS NOT NULL)
    SELECT TOP 1 @Use = COL1 FROM TAB t1 
    INNER JOIN TAB t2 ON t1.COL2 = t2.COL2
    WHERE COL3 = @Value3
ELSE IF (@Value4)
    SELECT TOP 1 @Use = COL1 FROM TAB t1 
    INNER JOIN TAB t2 ON t1.COL2 = t2.COL2
    INNER JOIN TAB t3 ON t2.COL3 = t3.COL3
    WHERE COL4 = @Value2

这行得通,但有没有办法缩短它? 我正在使用 sql 服务器 2012

谢谢, 尼克

类似下面的内容

SELECT t1.col1, t1.col2, t2.col3, t3.col4
FROM tab t1
JOIN tab t2 ON t1.col2 = t2.col2
JOIN tab t3 ON t2.col3 = t3.col3
WHERE 
  COALESCE( @Value1, t1.col1 ) = t1.col1 AND 
  COALESCE( @Value2, t2.col2 ) = t2.col2 AND 
  COALESCE( @Value3, t3.col3 ) = t3.col3 AND 
  COALESCE( @Value4, t3.col4 ) = t3.col4  
GROUP BY t1.col1, t1.col2, t2.col3, t3.col4