我有一个类似的表:
ID User_Code ProcessID DateCreated Remarks
1 AAA 1 2020-01-01 08:40 N/A
2 AAA 2 2020-01-01 09:34 R123
3 AAA 2 2020-01-01 10:40 SUCCESS
4 AAA 3 2020-01-01 11:00 N/A
5 BBB 1 2020-01-01 11:01 N/A
6 BBB 1 2020-01-01 11:10 N/A
7 BBB 2 2020-01-01 11:20 SUCCESS
8 BBB 3 2020-01-01 11:30 N/A
9 CCC 1 2020-01-01 11:31 N/A
10 CCC 2 2020-01-01 11:40 R001
11 CCC 2 2020-01-01 11:43 R002
我想要完成的是创建这样的结果
TransDate Remarks UserCode Process1 Process2 Process3
2020-01-01 SUCCESS AAA OK OK OK
2020-01-01 SUCCESS BBB OK OK OK
2020-01-01 R001 CCC OK OK NOK
如果特定用户代码的进程有记录,则要放置的列值是可以的,否则如果没有记录,则该值将是 NOK。此外,备注仅适用于 Process2,其值应为最新的备注。问题是它没有输出正确的结果,而是像这样显示
TransDate Remarks UserCode Process1 Process2 Process3
2020-01-01 AAA OK OK OK
2020-01-01 SUCCESS BBB OK OK OK
2020-01-01 R001 CCC OK OK NOK
请参见下面创建的 SQL:
SELECT UserCode , DATE(DateCreated) AS TransDate,
IF (COUNT(
CASE
WHEN PROCESS = 1
THEN 1
ELSE NULL
END
) > 0, "OK", "NOK" ) AS 'Process1',
IF (COUNT(
CASE
WHEN PROCESS = 2
THEN 1
ELSE NULL
END
) > 0, "OK", "NOK" ) AS 'Process2',
IF (COUNT(
CASE
WHEN PROCESS = 3
THEN 1
ELSE NULL
END
) > 0, "OK", "NOK" )AS 'Process3'
FROM MyTable WHERE UserCode = '######'
GROUP BY DATE(DateCreated)
不好意思,弄错了数据。记录应该是
ID User_Code ProcessID DateCreated Remarks
1 AAA 1 2020-01-01 08:40 N/A
2 AAA 2 2020-01-01 09:34 R123
3 AAA 2 2020-01-01 10:40 SUCCESS
4 AAA 3 2020-01-01 11:00 N/A
5 AAA 1 2020-01-02 11:01 N/A
6 AAA 1 2020-01-02 11:10 N/A
7 AAA 2 2020-01-02 11:20 SUCCESS
8 AAA 3 2020-01-02 11:30 N/A
9 AAA 1 2020-01-03 11:31 N/A
10 AAA 2 2020-01-03 11:40 R001
11 AAA 2 2020-01-03 11:43 R002
12 BBB 1 2020-01-03 11:32 N/A
13 BBB 2 2020-01-03 11:38 SUCCESS
14 BBB 3 2020-01-03 11:38 N/A
并且查询的结果应该与此类似,因为查询应该基于用户代码。
TransDate Remarks UserCode Process1 Process2 Process3
2020-01-01 SUCCESS AAA OK OK OK
2020-01-02 SUCCESS AAA OK OK OK
2020-01-03 R002 AAA OK OK NOK