第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL數(shù)據(jù)透視/交叉表查詢

MySQL數(shù)據(jù)透視/交叉表查詢

12345678_0001 2019-12-03 16:41:16
問題1:我有一個具有以下結(jié)構(gòu)和數(shù)據(jù)的表: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   |我知道我需要使用交叉表/數(shù)據(jù)透視查詢來獲得此顯示。為此,我基于對它的有限知識對其進(jìn)行了嘗試。任何人都可以幫助我對查詢進(jìn)行適當(dāng)?shù)母囊垣@取單行而不是如上所述的多行記錄。問題2:還有一種方法可以獲取特定字段的值作為列的名稱。正如你可以在上面看到我有user_input1,user_input2,...作為標(biāo)題。取而代之的是,我想將值customer_attribute作為列的標(biāo)題。為此,我檢查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需要幫助。
查看完整描述

3 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

雖然@John的靜態(tài)答案很好用,但是如果您要轉(zhuǎn)換的列數(shù)未知,我會考慮使用準(zhǔn)備好的語句來獲取結(jié)果:


SET @sql = NULL;

SELECT

  GROUP_CONCAT(DISTINCT

    CONCAT(

      'GROUP_CONCAT((CASE node_id when ',

      node_id,

      ' then entered_value else NULL END)) AS user_input',

      node_id

    )

  ) INTO @sql

FROM trn_user_log;



SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 

                  FROM trn_user_log 

                  GROUP BY app_id, transaction_id, mobile_no');


PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

參見帶有演示的SQL Fiddle


至于您的第二個,請說清楚您要做什么。


查看完整回答
反對 回復(fù) 2019-12-03
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊

對于我正在執(zhí)行的任務(wù),這是一個非常有用的問題。我繼續(xù)修改了@bluefin的解決方案,以解決您的第二個問題。以下代碼生成您最初請求的格式,其值Customer_attribute作為交叉表中的結(jié)果列標(biāo)題。


相關(guān)的更改是更改:


' then entered_value else NULL END)) AS user_input',

      node_id

對此:


' then entered_value else NULL END)) AS ''',

          customer_attribute,''''

完整代碼:


SET @sql = NULL;

SELECT

  GROUP_CONCAT(DISTINCT

    CONCAT(

      'GROUP_CONCAT((CASE node_id when ',

      node_id,

      ' then entered_value else NULL END)) AS ''',

      customer_attribute,''''

    )

  ) INTO @sql

FROM trn_user_log;



SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 

                  FROM trn_user_log 

                  GROUP BY app_id, transaction_id, mobile_no');


PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

另外,對于瀏覽此問題的其他用戶,如果您有很多試圖交叉制表的值,則可能會出錯,因為GROUP_CONCAT()的默認(rèn)最大長度為1024個字符。為了增加這一點(diǎn),請將其放在準(zhǔn)備好的語句的開頭:


SET SESSION group_concat_max_len = value; -- replace value with an int


查看完整回答
反對 回復(fù) 2019-12-03
  • 3 回答
  • 1 關(guān)注
  • 950 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號