【问题标题】:SQL Distinct - Not workingSQL 不同 - 不工作
【发布时间】:2014-05-25 01:17:16
【问题描述】:

我有 3 个表:Student、Apply 和 College。

我想返回每个学生的学生和专业。但是,当我这样做时,我会得到“重复”。所以我说:让我们使用 distinct,但是使用 distinct 我得到一个错误,而如果我取消“distinct”,查询工作正常(但有重复)。

我曾尝试在没有distinct 的情况下使用此代码,但我得到了相同的结果。请帮忙。

*这是 MS SQL SERVER ENTERPRISE 2008。 *我得到重复的学生...例如在第 1 行和第 3 行,我得到相同的结果:学生:“Amy”,专业:“CS”。

select **distinct** SName as Student, major  
from Student, Apply  
where Student.sID = Apply.sID;

【问题讨论】:

  • 搜索 sql 连接。
  • 你得到什么样的重复行?
  • 在第 1 行和第 3 行,我得到:Student = Amy,Major = CS:/
  • 您遇到的错误是什么?

标签: sql distinct


【解决方案1】:

您应该将列的数据类型转换为 varchar 以使 distinct 起作用:CONVERT(VARCHAR(MAX), column).

尝试:

select distinct CONVERT(VARCHAR(MAX), SName), CONVERT(VARCHAR(MAX), major)
from Student, Apply  
where Student.sID = Apply.sID;

【讨论】:

  • 我已阅读该文本将不再使用。我打算使用:nvarchar ;)
  • 这可能也行。尽管如果没有其他代码使用此数据库,最好更改数据库中的列类型并使用您首先使用的 SQL 语句。 (出于性能和可读性原因)
  • 这已经成功了!!!谢啦!我没有把它填满,但我会寻找“Varchar(max)。你能解释一下为什么用文本它不起作用吗?
  • 不客气。我不使用 MSSQL,但我认为 text 是某种二进制字段,MSSQL 不知道如何处理以很好地比较值。
  • 嗨@Spikolynn,我现在用“nvarchar”创建了新表(它是什么?我不知道怎么称呼它,SQL 新手)。但是,当您应用我的初始查询时,我遇到了同样的问题。数据类型文本无法比较...我还需要转换它吗? (Varchar?)...和2)何时使用“max”或例如(50)???谢啦!这就是我创建表格的方式:create table Student(sID int, sName nvarchar(50), GPA real, sizeHS int);
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2014-02-05
  • 2015-04-28
相关资源
最近更新 更多