問題1:我與下面的結構和數據的表格:MySQL的樞軸/交叉表查詢
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
幫助。
男人!!你閱讀我的想法......這正是我想要的,我正在做..我正在寫一個存儲過程來做同樣的事情。非常感謝!!! – DarkKnightFan
@Gaurav沒問題,但我沒有完全理解你的第二個問題。 – Taryn
是的,這非常棘手..我懷疑這甚至可能寫入SQL。我想將一個名爲'customer_attr'的列的值作爲頭部代替'user_input'。因此,例如'Q1'應該顯示在'user_input1'的位置。我知道我可以通過單獨獲取標題列並同樣顯示它來處理java代碼中的這件事。但我只是想知道這樣的事情是否可能。無論如何感謝您的幫助。 – DarkKnightFan