2010-11-11 74 views
0

我有一个查询,看起来像下面T-SQL查询W /分组

SELECT t1.Name, 
     t2.ID, 
     t2.name 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.ID = t2.ID 

,给了我价值的一个巨大的列表。但我真正想要的仅仅是t1.Name的不同值,但与t2.ID和t2.name的相关值不同。

我能想到的唯一方法就是使用Group By子句,但是我必须在t2.ID和t2.name上使用聚合函数。我使用了MIN/MAX,但是我得到的t2.ID和t2.name的值可能不在同一行。

我敢肯定,这里有一些简单的东西。感谢您的帮助球员

编辑: 这是实际的查询

SELECT (wi.wi_wpsnumbers), ws.* 
FROM wi_weld_instance wi 
INNER JOIN wlds_weld_section ws ON wi.weldinstanceid = ws.weldinstanceid 

这是返回的前几行:

*999    100633 106* 
*120,200,400  100656 44* 
120,200,400 100656 46 
120,200,400 100656 47 
120,200,400 100656 48 
120,200,400 100656 49 
120,200,400 100656 50 
120,200,400 100656 51 
*123    100657 46* 
123    100658 46 
123    100659 46 
123    100660 46 

所以我想真正想要的是第一行,然后第二行然后...其中123出现在第一列等。我用星标记了这些行。

+1

我想你将不得不发布更多关于你的问题的性质,以获得对你有用的帮助。例如,table1和table2之间的FK关系的性质是什么?什么是您使用此查询的上下文? Etc ... – 2010-11-11 15:04:14

+0

身份证上有FK关系。我们试图将查询用作发生焊接天堂的证据。这就是为什么我试图删除第一列中的重复值,因为我们只需要每个焊接类型一个示例。 – gazamatazzer 2010-11-11 15:26:37

回答

0

听起来像你只需要使用DISTINCT关键字,你似乎已经暗示了。

SELECT DISTINCT(t1.Name), 
    t2.ID, 
    t2.name 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.ID = t2.ID 
+0

即时从其他海报猜测,这里的tSQL语法有点不同于MySQL。丢失零件 – 2010-11-11 15:06:03

+0

对不同的行使用不同的外观,即所有三列中的不同值,我只希望在第一列中使用不同的值。 – gazamatazzer 2010-11-11 15:10:37

+0

@gazamatazzer - 如果一个特别的t1.Id对应于t2中的几行,这需要是一个有点任意的决定,决定哪个包含 – 2010-11-11 15:21:04

0

有一个DISTINCT关键字。

SELECT DISTINCT t1.Name, 
     t2.ID, 
     t2.name 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.ID = t2.ID 

约从MSDN DISTINCT相关信息:“指定唯一行可以在结果集中出现。出于DISTINCT关键字的目的,空值被认为是相等的。'

+0

对不同的外观使用不同的外观,即所有三列中的不同值,我只希望在第一列中使用不同的值。 – gazamatazzer 2010-11-11 15:11:32

+0

我们可以得到带样本返回值的样本表吗?我不完全了解您想要返回的内容。 – 2010-11-11 15:13:47