Si j'ai une table comme ci-dessousT-Sql multiples Autojointures pour retourner la valeur principale unique
| COL1 | COL2 | COL3 | COL4 |
-----------------------------
| A | B | *null* | *null* |
| *null* | B | C | *null* |
| *null* | *null* | C | D |
Et j'ai une procédure stockée qui peut prendre quatre paramètres comme si
CREATE PROCEDURE [dbo].[usp_Testing]
@value1 varchar(1) = NULL,
@value2 varchar(1) = NULL,
@value3 varchar(1) = NULL,
@value4 varchar(1) = NULL
Si seulement une seule valeur est transmise à la fois je voudrais obtenir la valeur A de COL1 par exemple Si @ value4 est passé avec la valeur 'D', alors je voudrais obtenir A en auto-joignant la ligne 3 D afin que nous puissions obtenir C qui obtient row2 C utilise B qui obtient row1 qui nous obtient A Actuellement je fais quelque chose comme (Witten main donc pourrait ne pas fonctionner pleinement) cette
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
cela fonctionne, mais est-il un moyen de faire ce court? J'utilise sql server 2012
Merci, Nick
sont les espaces vides dans la table au NULLs haut ou les valeurs que vous ne se soucient pas de cette question? – Caleth
Les espaces vides représentent les valeurs nulles. Désolé, ce n'était pas clair. –