[英]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.