Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 SQL Server 2008-按设备对用户进行分组_Sql Server 2008 R2_Group By - Fatal编程技术网

Sql server 2008 r2 SQL Server 2008-按设备对用户进行分组

Sql server 2008 r2 SQL Server 2008-按设备对用户进行分组,sql-server-2008-r2,group-by,Sql Server 2008 R2,Group By,在我的数据库中,有一个名为devices的表,其结构如下: Id (PK) Username DeviceID Device_type Date_Registered 我正在努力形成一个查询,该查询将检索具有不止一种设备类型的用户名,并将其列出X次(其中X是它们具有的设备类型的数量) 最终列表必须按用户名排序,并显示如下内容: foo@foo | ipad | foo@foo | android | foo2@foo | iphone | foo2@foo | ipad | 谁能帮我找到实现

在我的数据库中,有一个名为devices的表,其结构如下:

Id (PK)
Username
DeviceID
Device_type
Date_Registered
我正在努力形成一个查询,该查询将检索具有不止一种设备类型的用户名,并将其列出X次(其中X是它们具有的设备类型的数量)

最终列表必须按用户名排序,并显示如下内容:

foo@foo | ipad |
foo@foo | android |
foo2@foo | iphone |
foo2@foo | ipad |
谁能帮我找到实现这一目标的正确方法

如果你在帮忙的话,请或多或少地解释一下背后的逻辑,因为我真的很难做到分组等等


谢谢大家!

distinct关键字仅提供用户名和设备类型的唯一组合:

select distinct Username, Device_type from yourtable
这与:

select Username, Device_type from yourtable group by Username, Device_type
如果您想按用户名和设备类型统计设备,分组方式将非常有用,例如:

select Username, Device_type, count(*) as device_count from yourtable group by Username, Device_type
编辑

我误解了你的问题。要获得具有多种设备类型的用户列表有点困难,但仍然很简单。关键是
HAVING
cluase,您只选择分配了多个设备类型的用户名

select distinct Username, Device_type from yourtable
where username in 
(
    -- get list of users with more than one device type
    select username from yourtable
    group by username
    having count(distinct device_type) > 1
)
order by username

嘿,汤姆,谢谢你的回答。这个查询不能满足我的需要,因为我应该只返回具有多个设备的用户名,并且这些设备之间应该是不同的。也就是说,它不应该返回3台ipad的用户名,而应该只返回可能有一台ipad和另一台不同设备的用户名。@Hallaghan你是对的,请查看更新的答案。非常感谢,它帮助我理解了问题并解决了问题。