Если у меня есть таблица, как показано нижеT-Sql множественным Самосоединение вернуть одновинтовое значение,
| 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
Если за один раз передается только одно значение, я хотел бы получить значение A от COL1 , например Если @ value4 передается со значением «D», тогда я хотел бы получить A, присоединяясь к строке 3 D, чтобы мы могли получить 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
Спасибо, Ник
ли пустые места в таблице в верхней или значения NULL значения, которые не заботятся о для этого запрос? – Caleth
Пустые пространства представляют нули. Извините, что было неясно. –