2017-05-09 105 views
0

我正在使用交叉連接來複制從我的數據庫輸出的行。與條件交叉連接

我想一個過濾器,以便只有特定的值複製

這是我迄今爲止

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

此輸出作爲

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 
30   Karl 

我怎麼會做這個,但僅在EmployeeID = 20時重複;導致以下內容

EmployeeID EmployeeForeName 
20   Jamie 
30   Karl 
20   Jamie 

謝謝!

+0

這將有助於你向我們展示什麼樣的員工和數字看起來像 – kbball

+0

具有u嘗試:'WHERE僱員= 20'? –

+0

最簡單的方法是編寫兩個查詢並使用union all來合併結果。一個沒有交叉連接的查詢查找'<> 20',另一個查找'= 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)