SQL查询:仅提取具有特定课程的行

时间:2011-07-28 04:45:57

标签: sql sql-server

我有一个情况。如何提取仅使用C ++的AppId。没有其他课程。 样本数据如下所示

AppID  | Course
---------------
101    |  C++
101    | Data Structure
100    | C++.
201    | Analysis of Alogrithm
201    | Data Structure

等等

这是虚拟SQL

DROP TABLE #app

CREATE TABLE #app (AppID  int, Course nvarchar(50))
INSERT INTO #app 
VALUES(101,'C++'),
(101  ,'Data Structure'),
(100  ,'C++'),
(201  ,'Analysis of Alogrithm'),
(201  ,'Data Structure')

Select AppId,Course From #app

6 个答案:

答案 0 :(得分:2)

我认为这会起作用

select AppId from #app a
where 
AppId in (select AppId from #app where Course='C++') and
1 = (select count(course) from #app where AppId=a.AppId)

答案 1 :(得分:2)

您可以尝试这样的事情:

SELECT
    AppId, 
    Course, 
    count(*) as Total
FROM
    #app
WHERE
    AppId in (SELECT AppId FROM #app WHERE Course='C++')
GROUP BY
    AppId,
    Course
HAVING
    Total = 1

答案 2 :(得分:1)

select AppId from your_table where course = 'C++.';

答案 3 :(得分:1)

如果我理解正确,你只想在这种情况下提取100(唯一只有C ++作为课程的条目)。你可以用

SELECT AppID from #app WHERE Course=C++
MINUS
SELECT AppID from #app WHERE Course!=C++

这应该删除那些也有其他课程的AppID。

答案 4 :(得分:0)

你会这样做:

SELECT * FROM table_name WHERE Course='C++'

或者,如果您的表格包含课程& AppID字段有其他字段,但您只想提取与AppID和课程相关的数据,您可以这样做。

SELECT AppID, Course FROM table_name WHERE Course='C++'

答案 5 :(得分:0)

您也可以尝试此SQL查询

select AppId from #app
where Course='C++' and Course not in(select Course from #app where Course!='C++')
group by AppId