2

我正在使用 SQL Server 2008。我有两个 sql 查询

select Course 
from StudentDB.dbo.Student 
where RollNo = 130

select Course 
from StudentDB.dbo.Courses 
where Course is not null

第一个查询将返回以下值

MSc

第二个查询将返回

MCA
MSc
CSE
ECE
EEE

我需要加入这些查询并想要这样的输出

MSc
MCA
CSE
ECE
EEE

那就是将第二个查询的结果附加到第一个查询并删除重复值。

请注意,我需要结果顶部的第一个查询结果。这里的 Msc 是第一个值,因为它是第一个查询的结果。我试过联合。但它返回第二个查询本身的结果。所以这些查询的联合将无济于事。

4

3 回答 3

4

我不是 DISTINCT 的粉丝。根据 JW 的回答,这将为您提供不同的值列表,该列表首先使用 StudentDB.dbo.Student 中的值排序:

SELECT Course
FROM
(
    select Course, 1 ord from StudentDB.dbo.Student where RollNo = 130
    UNION
    select Course, 2 ord from StudentDB.dbo.Courses where Course is not null
) s
GROUP BY Course
ORDER BY min(ord)
于 2013-01-18T06:40:26.307 回答
0

这可能是因为服务器中的默认排序规则是 SQL_Latin1_General_CP1_CI_AS,这意味着它不区分大小写 (CI)。

这使您的 Msc 与 MSC 相同。您需要将排序规则更改为不区分大小写的不同排序规则。

查看可能的排序规则:http: //msdn.microsoft.com/en-us/library/ms144250 (v=sql.105).aspx

请参阅 COLLATE http://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/的用法

于 2013-01-18T06:18:09.433 回答
0

只需在 SQL Server 中运行此脚本即可获得结果,也可以在存储过程中使用它。

SELECT Course,1 ord INTO #tmpTable FROM Student

INSERT #tmpTable
SELECT Course,2 ord FROM Courses WHERE Course IS NOT NULL 
AND Course NOT IN(SELECT Course FROM Student)

SELECT Course FROM #tmpTable ORDER BY ord

DROP TABLE #tmpTable
于 2013-01-18T06:28:45.850 回答