Hin*_*man 4 sql-server sql-server-2017
Table_1
Name | Activity | LogTime
A | 0 | 2018-12-17 10:16:04.877
A | 1 | 2018-12-15 10:16:04.877
A | 0 | 2018-12-16 10:16:04.877
A | 0 | 2018-12-10 10:16:04.877
A | 0 | 2018-12-10 10:10:04.877
B | 1 | 2018-12-16 10:16:04.877
B | 0 | 2018-12-17 10:16:04.877
C | 1 | 2018-12-14 10:16:04.877
C | 1 | 2018-12-12 10:16:04.877
C | 1 | 2018-12-18 10:16:04.877
Run Code Online (Sandbox Code Playgroud)
想要的结果
Name | TOTALActivity_0 | TOTALActivity_1 | LatestActivity_0_Logtime | LatestActivity_1_Logtime
A | 4 | 1 | 2018-12-17 10:16:04.877 | 2018-12-15 10:16:04.877
B | 1 | 1 | 2018-12-17 10:16:04.877 | 2018-12-16 10:16:04.877
C | 0 | 3 | NULL | 2018-12-18 10:16:04.877
Run Code Online (Sandbox Code Playgroud)
我能够得到如下结果
Name | TOTALActivity_0 | TOTALActivity_1
A | 4 | 1
B | 1 | 1
C | 0 | 3
Run Code Online (Sandbox Code Playgroud)
使用以下查询
SELECT
NAME,
SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1
FROM Table_1
GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)
如果我尝试如下
SELECT
NAME,
SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1,
CASE WHEN Activity = 0 THEN LogTime ELSE NULL END AS LatestActivity_0_Logtime,
CASE WHEN Activity = 1 THEN LogTime ELSE NULL END AS LatestActivity_1_Logtime
FROM Table_1
GROUP BY NAME,Activity,LogTime
Run Code Online (Sandbox Code Playgroud)
然后它给出 Single-single 和冗余记录。然后我再次尝试使用以下查询
SELECT
NAME,
SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1,
NULL AS LatestActivity_0_Logtime,
NULL AS LatestActivity_1_Logtime
FROM Table_1
GROUP BY NAME
UNION
SELECT NULL,NULL,NULL,CASE WHEN Activity = 0 THEN LogTime ELSE NULL END AS LatestActivity_0_Logtime,
CASE WHEN Activity = 1 THEN LogTime ELSE NULL END AS LatestActivity_1_Logtime
FROM Table_1
Run Code Online (Sandbox Code Playgroud)
然后结果再次不受欢迎,如下所示
Name | TOTALActivity_0 | TOTALActivity_1 | LatestActivity_0_Logtime | LatestActivity_1_Logtime
A | 4 | 1 | NULL | NULL
B | 1 | 1 | NULL | NULL
B | 1 | 3 | NULL | NULL
NULL | NULL | NULL | 2018-12-17 10:16:04.877 | 2018-12-15 10:16:04.877
NULL | NULL | NULL | 2018-12-16 10:16:04.877 | 2018-12-16 10:16:04.877
NULL | NULL | NULL | 2018-12-10 10:16:04.877 | 2018-12-18 10:16:04.877
NULL | NULL | NULL | 2018-12-10 10:10:04.877 | 2018-12-15 10:16:04.877
NULL | NULL | NULL | 2018-12-17 10:16:04.877 | 2018-12-16 10:16:04.877
.
.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)
请帮助根据需要获得不同的和合并的结果
这应该有效:
SELECT
Name,
COUNT(CASE WHEN Activity = 0 THEN 1 END) AS TOTALActivity_0,
COUNT(CASE WHEN Activity = 1 THEN 1 END) AS TOTALActivity_1,
MAX(CASE WHEN Activity = 0 THEN LogTime END) AS LatestActivity_0_Logtime,
MAX(CASE WHEN Activity = 1 THEN LogTime END) AS LatestActivity_1_Logtime
FROM
Table_1
GROUP BY
Name ;
Run Code Online (Sandbox Code Playgroud)
测试:dbfiddle.uk
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |