sql - 如何根据每天的日常设备使用情况对 id 进行分割

标签 sql sql-server

目标:我想根据每天的设备类型使用情况对 ID 进行分割。如果 Id 仅使用 pc,则使用 'pc'。如果只是移动,那就是“移动”。如果至少有 1 部手机和 1 部电脑,则选择“两者”。

示例数据:

CREATE TABLE #test1 (
    dates DATE
    ,id INT
    ,device CHAR(30)
    )

INSERT INTO #test1
VALUES  
('2018-01-01', 123, 'pc')
,('2018-01-01', 123, 'pc')
,('2018-01-01', 123, 'mobile')
,('2018-01-01', 123, 'mobile')
,('2018-01-01', 800, 'mobile')
,('2018-01-01', 800, 'mobile')
,('2018-01-01', 800, 'mobile')
,('2018-01-01', 500, 'pc')
,('2018-01-01', 500, 'pc')
,('2018-01-02', 123, 'mobile')

这是我到目前为止尝试过但无济于事的方法:

SELECT DISTINCT dates
    , id
    ,CASE 
        WHEN device = 'pc' AND device = 'mobile' THEN 'Both'
        WHEN device = 'pc' THEN 'pc'
        ELSE 'mobile'
        END AS x
FROM #test1

我的输出应该是这样的:

+------------+-----+--------+
|   dates    | id  |   x    |  
+------------+-----+--------+
| 2018-01-01 | 123 | both   |  
| 2018-01-01 | 800 | mobile |  
| 2018-01-01 | 500 | pc     |  
| 2018-01-02 | 123 | mobile |  
+------------+-----+--------+

最佳答案

您需要按日期、id 分组并计算 device 的不同值:

SELECT dates
    , id
    ,CASE COUNT(DISTINCT device)
        WHEN 1 THEN MAX(device)
        WHEN 2 THEN 'both'
     END AS x
FROM #test1
GROUP BY dates, id

参见 demo

关于sql - 如何根据每天的日常设备使用情况对 id 进行分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352288/

相关文章:

mysql - 使用 java.sql.TimeStamp 和 mysql 数据库遇到的奇怪行为

sql - 是否可以将新样式的内连接与外连接连接起来?

mysql - 具有父类(super class)型表的其他 JOIN 结果的 JOIN 表

sql-server - SQL Server 2008 中 XML 变量的大小限制

sql-server - 提高 "database layer"处的安全性 - 仅允许选择查询

mysql - 对单个表执行集合减法

mysql - 无法将数据插入数据库

SQL COUNT 按具有多个日期字段的每个日期

sql-server - SSMS 2014 - 无法检索此请求的数据 - 未知属性 IsMemoryOptimized

node.js - NodeJS SQL Server - 如何使用将返回一个 promise 的数组输入参数进行查询