简体   繁体   English

SQL - 对一列进行 SELECT DISTINCT

[英]SQL - SELECT DISTINCT on one column

I got a table like我有一张像

  ID  NAME     TL_NUM    TL_NAME      MANAGER_NUM
  ===============================================
  1   F-23      2         T-2         1
  2   B-23      3         T-3         2
  3   F-24      2         T-2         1
  4   F-25      1         T-1         2
  5   F-26      2         T-2         2 
  6   F-27      1         T-1         2

Now I would like to get a result set as follows现在我想得到一个结果集如下

  TL_NUM    TL_NAME    MANAGER_NUM
  ================================
  2         T-2         1
  3         T-3         2
  1         T-1         2
  2         T-2         2 

I tried using this following query我尝试使用以下查询

   select DISTINCT TL_NUM, TL_NAME,MANAGER_NUM
   from dataTable

It gives me a correct result set when use this query but not the above one:当使用这个查询而不是上面的查询时,它给了我一个正确的结果集:

  select DISTINCT TL_NUM, TL_NAME
   from dataTable

but it is not returning correct 'MANAGER_NUM' in my result set.但它没有在我的结果集中返回正确的“MANAGER_NUM”。 Can anyone let me in know what the exact issue is, I believe it is because of DISTINCT?任何人都可以让我知道确切的问题是什么,我相信这是因为 DISTINCT?

您的查询看起来不错并且工作正常,但根据输出排序不正确。我已经测试了查询及其工作正常。

select DISTINCT TL_NUM, TL_NAME ,MANAGER_NUM from #dataTable order by MANAGER_NUM

After testing, it does return the correct values - are you looking at the values correctly?测试后,它确实返回了正确的值 - 您是否正确查看了这些值? Here is a test script for creating a working version of the table:这是用于创建表的工作版本的测试脚本:

CREATE TABLE #dataTable (id int identity, Name varchar(10), TL_NUM smallint, TL_NAME varchar(10), MANAGER_NUM smallint)
INSERT INTO #datatable (Name, TL_NUM, TL_NAME, MANAGER_NUM)
VALUES 
     ('F-23',      2,         'T-2',         1),
     ('B-23',      3,         'T-3',         2),
     ('F-24',      2,         'T-2',         1),
     ('F-25',      1,         'T-1',         2),
     ('F-26',      2,         'T-2',         2),
     ('F-27',      1,         'T-1',         2)

Then I used your query:然后我使用了您的查询:

select DISTINCT TL_NUM, TL_NAME ,MANAGER_NUM
from #dataTable

And got this return value set:并设置了这个返回值:

---------------------------------
|TL_NUM |TL_NAME    |MANAGER_NUM|
---------------------------------
|1      |T-1        |2          |
|2      |T-2        |1          |
|2      |T-2        |2          |
|3      |T-3        |2          |
---------------------------------

The primary difference is the order of the returned rows, but they are returned with correct values.主要区别在于返回行的顺序,但返回的值是正确的。

check out my fiddle below:在下面查看我的小提琴:

DECLARE @tmp TABLE ( ID INT,NAME NVARCHAR(100),TL_NUM INT,TL_NAME NVARCHAR(100),MANAGER_NUM INT)

INSERT INTO @tmp
VALUES
(1, 'F-23', 2, 'T-2', 1)
,(2, 'B-23', 3, 'T-3', 2)
,(3, 'F-24', 2, 'T-2', 1)
,(4, 'F-25', 1, 'T-1', 2)
,(5, 'F-26', 2, 'T-2', 2)
,(6, 'F-27', 1, 'T-1', 2)

SELECT   DISTINCT t.TL_NUM ,t.TL_NAME ,t.MANAGER_NUM 
FROM     @tmp AS t
ORDER BY t.MANAGER_NUM
        ,t.TL_NAME DESC

You can do like this:你可以这样做:

CREATE TABLE TAB1 ( ID INT,NAME NVARCHAR(100),TL_NUM INT,TL_NAME 
NVARCHAR(100),MANAGER_NUM INT)

INSERT INTO TAB1
VALUES
(1, 'F-23', 2, 'T-2', 1)
,(2, 'B-23', 3, 'T-3', 2)
,(3, 'F-24', 2, 'T-2', 1)
,(4, 'F-25', 1, 'T-1', 2)
,(5, 'F-26', 2, 'T-2', 2)
,(6, 'F-27', 1, 'T-1', 2)

SELECT   DISTINCT t.TL_NUM ,t.TL_NAME ,t.MANAGER_NUM 
FROM     TAB1 AS t;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM