交叉数据 mysql_MySQL数据透视/交叉表查询

问题1: 我有一个具有以下结构和数据的表:

app_id transaction_id mobile_no node_id customer_attribute entered_value

100 111 9999999999 1 Q1 2

100 111 9999999999 2 Q2 1

100 111 9999999999 3 Q3 4

100 111 9999999999 4 Q4 3

100 111 9999999999 5 Q5 2

100 222 8888888888 4 Q4 1

100 222 8888888888 3 Q3 2

100 222 8888888888 2 Q2 1

100 222 8888888888 1 Q1 3

100 222 8888888888 5 Q5 4

我想以以下格式显示这些记录:

app_id | transaction_id | mobile | Q1 | Q2 | Q3 | Q4 | Q5 |

100 | 111 | 9999999999 | 2 | 1 | 4 | 3 | 2 |

100 | 222 | 8888888888 | 3 | 1 | 2 | 1 | 4 |

我知道我需要使用交叉表/数据透视查询来获得此显示。为此,我基于对它的有限知识对其进行了尝试。以下是我的查询:

SELECT app_id, transaction_id, mobile_no,

(CASE node_id WHEN 1 THEN entered_value ELSE '' END) AS user_input1,

(CASE node_id WHEN 2 THEN entered_value ELSE '' END) AS user_input2,

(CASE node_id WHEN 3 THEN entered_value ELSE '' END) AS user_input3,

(CASE node_id WHEN 4 THEN entered_value ELSE '' END) AS user_input4,

(CASE node_id WHEN 5 THEN entered_value ELSE '' END) AS user_input5

FROM trn_user_log

GROUP BY app_id, transaction_id, mobile_no, node_id

根据此查询,我得到以下显示:

app_id transaction_id mobile_no user_input1 user_input2 user_input3 user_input4 user_input5

100 111 9999999999 2

100 111 9999999999 1

100 111 9999999999 4

100 111 9999999999 3

100 111 9999999999 2

100 222 8888888888 3

100 222 8888888888 1

100 222 8888888888 2

100 222 8888888888 1

100 222 8888888888 4

任何人都可以帮助我对查询进行适当的更改以获取单行而不是如上所述的多行记录。

问题2:

还有一种方法可以获取特定字段的值作为列的名称。正如你可以在上面看到我有user_input1,user_input2,…作为标题。取而代之的是,我想将值customer_attribute作为列的标题。

为此,我检查NAME_CONST(name,value)如下:

SELECT app_id, transaction_id, mobile_no,

NAME_CONST(customer_attribute, (CASE node_id WHEN 1 THEN entered_value ELSE '' END))

FROM trn_user_log

但它给出了一个错误

Error Code : 1210 Incorrect arguments to NAME_CONST

需要帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值