2017-05-09 2 views
0

Ich verwende eine Kreuzverbindung, um Zeilen zu vervielfältigen, die von meiner Datenbank ausgegeben werden.cross join mit Bedingung

ich einen Filter möchte, so dass nur bestimmte Werte

Dieser dupliziert ist, was ich

SELECT EmployeeID, EmployeeForeName From Employee 
CROSS JOIN 
(SELECT TOP 2 Number FROM Numbers) Numbers 
WHERE EmployeeID in (20,30) 

Diese Ausgänge als

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 
30   Karl 

Wie würde ich dies tun, so weit haben, aber duplizieren nur wo EmployeeID = 20; Daraus ergibt sich folgende

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 

Danke!

+0

Es würde helfen, wenn Sie uns zeigen, was Mitarbeiter und Zahlen aussehen – kbball

+0

Haben u versucht: WHERE EmployeeID = 20'? –

+0

Der einfachste Weg ist, zwei Abfragen zu schreiben und eine 'union all' zu verwenden, um die Ergebnisse zu kombinieren. Eine Abfrage ohne den Kreuz-Join sucht nach <<> 20 sucht. – Silvermind

Antwort

1

Sie scheinen keine cross join auf beiden Werten zu wollen.

SELECT EmployeeID, EmployeeForeName 
FROM Employee CROSS JOIN 
    (SELECT TOP 2 Number FROM Numbers) Numbers 
WHERE EmployeeID IN (20) 
UNION ALL 
SELECT EmployeeID, EmployeeForeName 
FROM Employee 
WHERE EmployeeID IN (30); 
0

Versuchen Sie, diese

SELECT EmployeeID, EmployeeForeName From Employee 
CROSS JOIN 
(SELECT TOP 2 Number FROM Numbers) Numbers 
WHERE EmployeeID =20 
union all 
SELECT EmployeeID, EmployeeForeName 
FROM Employee 
WHERE EmployeeID =30 
0

So etwas sollte es tun;

SELECT EmployeeID, EmployeeForeName From Employee 
CROSS JOIN 
(SELECT TOP 2 Number FROM Numbers) Numbers 
WHERE EmployeeID = 20 
UNION ALL 
SELECT EmployeeID, EmployeeForeName From Employee 
WHERE EmployeeID = 30 
1

Try this:

SELECT e.EmployeeID, e.EmployeeForeName 
FROM Employee AS e 
CROSS APPLY 
    (SELECT t.n 
    FROM (VALUES (1), (2)) AS t(n) 
    WHERE (t.n = 1) OR (e.EmployeeID = 20)) AS x 
WHERE e.EmployeeID in (20,30)