2017-05-09 92 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)