2016-04-22 13 views
-5

DB-TabelleSQL qry Trickl Puzzle

ColA ColB ColC ColD  

Null Null Null Null 
120  Null Null Null 
120  1  Null Null 
120  1  5  Null 
120  1  5  1 

Declare @ColA as Int = 120 --Dieser kann nicht NULL sein, aber es kann etwas 1500 sein, die nicht in db nicht existiert

Declare @ColB as Int = 1 --Dieser NULL sein kann oder es kann etwas 1500 sein, die nicht in db nicht existiert

Declare @ColC as Int = 5 --Dieser NULL sein kann oder es etwas 1500 sein, die nicht in db nicht existiert

Declare @ColD as Int = 1 --Dieser kann NULL oder es kann etwas 1500 sein, die nicht in db mit mehr als einer Spalte

--Rough Entwurf aber nicht funktioniert

SELECT * FROM @TblA 
WHERE 
    @ColA=ColA AND 
    ISNULL(ColB, @ColB)= @ColB AND 
    EXISTS(SELECT 1 FROM @TblA WHERE @ColA=ColA) 
UNION 
SELECT * FROM @TblA 
WHERE 
    ColA IS NULL AND 
    ISNULL(ColB, @ColB)= @ColB AND 
    NOT EXISTS (SELECT 1 FROM @TblA WHERE @ColA=ColA) 

SQL-Ausgang ist vorhanden --Wenn @ColA = 120

ColA ColB ColC ColD  

120  Null Null Null 
120  1  Null Null 
120  Null 5  3 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL Ausgabe --Wenn @ColA = 1259 @ColA hat Spiel in dieser so Null dB erhalten für ColA

ColA ColB ColC ColD  

Null Null Null Null 

SQL Output --Wenn @ColA = 120 & @ColB = 1 @ColB in db hat Spiel so für ColA & ColB passende Datensätze erhalten

ColA ColB ColC ColD  

120  1  Null Null 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL Output --Wenn @ColA = 120 & @ColB = 178 @ColB hat keine Übereinstimmung in db so erhalten Aufzeichnungen für ColA und Nulls für ColB passend, da es keine ColB ist = 178

ColA ColB ColC ColD  

120  Null Null Null 
120  1  Null Null 
120  Null 5  3 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL Ausgabe --Wenn @ColA = 120 & @ColB = 1 & COLC = 5 erhalten übereinstimmende Datensätze für ColA & ColB & COLC

ColA ColB ColC ColD  

120  1  5  Null 
120  1  5  1 
120  1  5  Null 

SQL Ausgabe --Wenn @ColA = 120 & @ColB = 1 & COLC = 500 @ColC hat keine Übereinstimmung in db so passende Datensätze für ColA und ColB bekommen, aber für COLC nicht da da kein COLC = 500

ColA ColB ColC ColD  

120  1  Null Null 
120  1  5  Null 
120  1  Null 4 
120  1  5  1 
120  1  5  Null 

SQL Output --Wenn @ColA = 120 & @ColB = 1 & COLC = 5 & ColD = 1 get passenden Datensätze für ColA & ColB & COLC & ColD

ColA ColB ColC ColD  

120  1  5  1 

SQL Output --Wenn @ColA = 120 & @ColB = 1 & COLC = 5 & @ColD = 500 hat dann @ColD keine Übereinstimmung in db so passend Records für ColA und ColB & COLC aber nicht für ColD da keine ColD = 500

ColA ColB ColC ColD  

120  1  5  Null 
120  1  5  1 
120  1  5  Null 

möglich ??

+0

Werte Irgendwelche Glück????????? – Ken

Antwort

0

SELECT *

VON @tblA

WHERE

@ColA = cola und

(@ColB = ColB) UND

(@ColC = COLC)

Union

--Handles direkte oder falsche Eingangswerte

SELECT *

FROM @tblA CPT

WHERE

@ColA = ColA und

(exists (SELECT FROM 1 @tblA WHERE @ ColB = ColB) und @ ColB ist nicht NULL und @ ColB = ColB)

Union

--Handles direkte oder falsche Eingangswerte

SELECT *

FROM @tblA CPT

WHERE

@ColA = ColA und

(exists (SELECT FROM 1 @ tblA WHERE @ ColC = ColC) und @ ColC ist nicht NULL und @ ColC = ColC)

Union

--Handles direkte oder falsche Eingabewerte

SELECT *

VON @tblA CPT

WHERE

@ColA = ColA und

(@ColB not in (SELECT ColB FROM @tblA) and @ColB is Not NULL and 

ISNULL (ColB, @ ColB) = @ ColB)

Union

--Handles NULL Eingang

SELECT *

VON @tblA CPT

WHERE

@ColA = ColA und

@ColB is NULL and ISNULL(ColB, @ColB)= @ColB