簡體   English   中英

MySQL選擇列,這是另一列中的值

[英]MySQL select column which is a value in another column

我的sql表是這樣的:

+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+
| id | msisdn     | status | reason        | CallRejection | Unavailable | NoAnswer | NetworkBusy | autotimestamp       |
+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+
|  1 | 9999999901 | Failed | NoAnswer      |             1 |           2 |        2 |           4 | 2013-12-19 15:46:50 |
|  2 | 9999999902 | Failed | NetworkBusy   |             4 |           2 |        3 |           2 | 2013-12-19 13:07:42 |
|  3 | 9999999903 | Failed | CallRejection |             6 |           6 |        6 |           5 | 2013-12-19 13:07:53 |
|  4 | 9999999904 | Failed | Unavailable   |             2 |           4 |        2 |           0 | 2013-12-19 13:08:03 |
|  5 | 9999999905 | Failed | Misc          |             6 |           2 |        6 |           2 | 2013-12-19 13:07:01 |
|  6 | 9999999906 | Failed | NoAnswer      |             1 |           3 |        1 |           6 | 2013-12-19 13:07:24 |
|  7 | 9999999907 | Failed | NetworkBusy   |             6 |           6 |        2 |           3 | 2013-12-19 13:07:42 |
|  8 | 9999999908 | Failed | CallRejection |             8 |           3 |        3 |           0 | 2013-12-19 13:07:53 |
|  9 | 9999999909 | Failed | Unavailable   |             3 |           8 |        5 |           6 | 2013-12-19 13:08:03 |
| 10 | 9999999910 | Failed | Misc          |             8 |           4 |        0 |           4 | 2013-12-19 13:07:01 |
+----+------------+--------+---------------+---------------+-------------+----------+-------------+---------------------+

我想根據每行的reason列的值提取每個原因的值。 例如:

row 1應該給出2作為結果,因為reason列具有noanswer ,因此應該返回該特定列的值,即noanswer

實際上,我必須在將返回的值與常量進行比較后選擇多行。 我可以通過以下方法執行此操作:

select @col := reason from msisdn_table where id=1;
SET @a = concat('select ', @col, ' from msisdn_table where id=1');
PREPARE STMT FROM @a;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;

但這不是一個非常有前途的解決方案,因為它只用於一行,我將不得不使用for循環以獲得1000行的塊,這將不是非常有效。 什么是更有效的方式?

嘗試這個:

SELECT id, 
       reason
       CASE
         WHEN reason = 'NoAnswer' THEN NoAnswer
         WHEN reason = 'NetworkBusy' THEN NetworkBusy
       END AS value
FROM table1

它應該給你一個像這樣的輸出:

+----+------------+----------+
| id | reason     | value    |
+----+------------+----------+
|  1 | NoAnswer   |        2 |
+----+------------+----------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM