选择字符串不重复的行

时间:2017-03-31 16:51:19

标签: sql sql-server

我不确定如何对此进行说明,但我有两个表,我使用INNER JOIN来计算我拥有的记录数。这很好但问题是我在table1中有一些行,其中一些记录有一个字符串可以出现在另一个记录中。像这样:

table1                   table2
------                   ------
id    string             id    table1_id    some_column
01    aaa                01    01           1
02    bbb                02    02           3
03    aaa                03    03           1
04    ccc                04    04           4
05    bbb                05    05           2
...                      ...                

我的查询如下:

SELECT COUNT(*) FROM table1
INNER JOIN table2 ON table1.id = table2.table1_id

此查询工作正常,但我希望能够获得不同的值。所以我的查询应该只返回这些记录:

table1                   table2
------                   ------
id    string             id    table1_id    some_column
01    aaa                01    01           1
02    bbb                02    02           3
04    ccc                04    04           4
...                      ...             

如您所见,它不会显示共享相同字符串的任何其他记录。我会在INNER JOIN之后或之前写些什么?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以按表格分组

select count(*) 
from (
    select min(id) as id, string 
    from table1 
    group by string
) t1
inner join table2 on t1.id = table2.table1_id

答案 1 :(得分:1)

使用common table expressionrow_number()一起选择每组string的前1名。

;with cte as (
  select *
    , rn = row_number() over (partition by string order by id)
  from t1
)

select count(*)
  from cte
    inner join t2
      on cte.id = t2.table_1id
     and cte.rn = 1

使用子查询而不是cte:

select count(*)
  from (
    select *
      , rn = row_number() over (partition by string order by id)
    from t1
  ) sub
    inner join t2
      on sub.id = t2.table_1id
     and sub.rn = 1

答案 2 :(得分:0)

从table1中选择DISTINCT count(*) table1.id = table2.table1_id

上的内连接table2

这将为您提供表格中不同值的计数

答案 3 :(得分:0)

如果你真的只想要计数,你可以这样做:

SELECT COUNT(DISTINCT table1.string)
FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id

如果您想要使用不同的值而不仅仅计算它们,那么其他一些答案显然会更好。