2017-05-09 23 views
0

私はデータベースから出力された行を複製するためにクロス結合を使用しています。条件付きクロス結合

特定の値のみが

この

を重複しているように、私は、フィルタを希望

は私が

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 
30   Karl 

どのように私はこれを行うだろうが、限り

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

この出力を持っているものですEmployeeID = 20の場合のみ重複します。結果は次のとおりです

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 

ありがとう!

+0

あなたはuは試したことがあり、従業員と数字は – kbball

+0

どのように見えるか私達を示した場合、それが役立つだろう: 'WHERE社員= 20'を? –

+0

最も簡単な方法は、2つのクエリを作成し、結果を結合するために 'union all'を使用することです。相互結合を持たない1つのクエリは '<> 20 'を検索し、もう1つは' = 20'を探すクロス結合を探します。 – Silvermind

答えて

1

cross joinを両方の値にしたくないようです。

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

トリックを行う必要があり、このような本

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

何かを試してみてください。

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

これを試してみてください:

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)