SQL Server:在这种情况下如何编写SQL语句?

时间:2017-10-19 12:13:27

标签: sql sql-server tsql

这是我在表格中的示例数据:

| name  | type |
+-------+------+
|  j    |   1  |
|  j    |   2  |
|  k    |   1  |
|  k    |   1  |
|  k    |   1  |

我想选择姓名全部为1的名字。

j有两个元组,但type = 1元组只有一个。

k有三个元组,type = 1元组是三元组。

因此结果是k

我尽可能地尽可能地思考,但我现在就放弃了:(

有人能给我一些提示吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

假设您只想要不同的名称,而不是所有相关记录

Select name 
 From  YourTable
 Group By Name
 Having min(type)=1 and max(type)=1

答案 1 :(得分:2)

如果我理解正确,您要排除所有NAME,其中TYPE在整个表的任何行中可能不等于1。它可以通过以下查询来完成:

select *
from your_table as t1
where not exists 
 ( select 1
   from your_table as t2
   where t2.type <> 1
    and t1.name = t2.name)

答案 2 :(得分:1)

按名称统计元组。伯爵是一个集合。在组中由您放置非聚合列 - 名称。这是按降序排序的,DESC。我们只选择最上面的一行,因此我们从最大到最小的排序是最大的“元组”。

SQL Server中的示例代码:

DECLARE @temp TABLE (name char(1), type tinyint)
INSERT INTO @temp VALUES ('j', 1), ('j', 2), ('k', 1), ('k', 1), ('k',1)

SELECT TOP 1 
       name
      ,COUNT(name) AS [Tuples]
  FROM @temp
 WHERE type = 1
 GROUP BY name
ORDER BY Tuples DESC