如何将结果集中的列值展平,使其出现在一行上

时间:2019-06-26 15:13:51

标签: sql sql-server

一个表包含以下列:

id
date
field1,
field2

要求是针对 field1field2生成一个报告,该报告显示今天哪些行与前一天具有相同的值,并说明是否是field1field2-或两者都已更改。该报告将不会显示实际的不变值。因此输出应如下所示:

ID  FIELDS_CHANGED
10  field1
20  field1,field2
30  field2
40  field1,field2

使用以下查询:

SELECT e1.id, "field1"
FROM my_table e1
INNER JOIN
my_table  e2
ON e1.id = e2.id
WHERE e1.date = CURDATE()-1
AND e2.date = CURDATE()-2
AND e1.field1 = e2.field2

UNION

SELECT e3.id, "field2"
FROM my_table e3
INNER JOIN
my_table  e4
ON e3.id = e4.id
WHERE e3.date = CURDATE()-1
AND e4.date = CURDATE()-2
AND e3.field2 = e4.field2

礼物:

ID  FIELDS_CHANGED
10  field1
20  field1
20  field2
30  field2
40  field1
40  field2

展平以给出上面的输出的正确方法是什么?

以下是一些示例数据

ID DATE     FIELD1 FIELD2
10 26/06/19 100    200
10 25/06/19 100    300
20 26/06/19 100    200
20 25/06/19 100    200
30 26/06/19 100    200
30 25/06/19 200    200
40 26/06/19 100    200
40 25/06/19 100    200

谢谢

0 个答案:

没有答案