目标:我想根据每天的设备类型使用情况对 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/