【发布时间】:2017-02-03 22:42:20
【问题描述】:
我在 Microsoft Visual Studio 2010 中使用 SQL-Server 2012。
作为前言,我不能使用 ROW_NUMBER() OVER(PARTITION BY Col),因为我使用的 Visual Studio 版本不支持 OVER() 方法。不幸的是,我不在一个可以获得新软件的地方。
我有一组部门和工作 ID,例如:
SELECT
Department,
Job_ID
FROM
Table1
JOIN Table2 on
Table1.id = Table2.id
Department Job_ID
__________________________
Marketing J3
Engineering J1
Marketing J2
Recruiting J2
Marketing J8
Administration J3
Recruiting J1
Administration J5
Administration J1
我正在尝试按 Job_ID 进行分组,显示与每个 Job_ID 关联的不同部门,并且仅包括具有 2 个以上部门的组。最终结果将是:
Department Job_ID
__________________________
Administration J1
Recruiting J1
Engineering J1
Marketing J2
Recruiting J2
Marketing J3
Administration J3
我试过了:
SELECT Job_ID, count(distinct(Department)) as Dept_CountD
FROM Table1 JOIN Table2 on Table1.id=Table2.id
GROUP BY Job_ID
HAVING count(distinct(Department)) >1
这可行,但是,它不会将部门与每个 ID 一起分组。我也知道(并且已经测试过)我不能将 Department 插入 Group By 语句,因为这将返回仅等于 1 的不同部门计数!
我已尝试将上述语句构建为 CTE 并在 Job_ID 上进行内部连接,因此我只有 Job_ID 与超过 2 个不同的部门相关联,但是,我最终在连接的分组中出现重复的部门。
我正在考虑加入子查询或进行半联接?
【问题讨论】:
-
预期输出是什么?
-
“我不能使用“ROW_NUMBER() OVER(PARTITION BY)”是什么意思,因为我正在使用的 Visual Studio 版本不支持“OVER()”方法? SQL Server 的版本决定了哪些脚本可以工作,哪些不能,SQL Server 2012 支持
OVER子句。 -
什么是“半连接”?
-
预期的输出已经写入。它是“最终结果将是:”之后的第二个数据块
-
半连接示例是:SELECT col1, col2 FROM table1 WHERE id IN (SELECT t1_id FROM table2 WHERE date > CURRENT_TIMESTAMP)
标签: sql-server visual-studio-2010 sql-server-2012