首页  >  问答  >  正文

识别特定行具有一致值的列名

我正在尝试在 mysql 中进行查询以获取某一特定行具有特定值的任何列。 在 Mysql 中,我们可以根据列的任何特定值获取行。

我有一个像这样的表:

+----+------------+------------+---------------+---------------+---------+----------------+---------
| ID | MSISDN     | MissedCall | SponsoredCall | AdvanceCredit | ACvalue | SuitablePackId | AutoTimeStamp       |
+----+------------+------------+---------------+---------------+---------+----------------+---------------------+
|  1 | 9944994488 |          1 |             0 |             1 |       0 |              1 | 2014-09-18 10:42:55 |
|  4 | 9879877897 |          0 |             1 |             0 |       0 |              2 | 2014-09-18 10:42:55 |
+----+------------+------------+---------------+---------------+---------+----------------+---------------------+

我需要的是,当我根据 MSISDN 选择一行时,它应该返回值为固定的该行的所有列名称(例如 1)。

因此,在上表中,MSISDN = 9944994488 应该返回

MissedCall 
AdvanceCredit 
SuitablePackId

我尝试过的是:

SELECT COLUMN_NAME as names 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'bi' 
AND TABLE_NAME = 'useranalysisresult'

这会返回表的列名称。 但如何获取具有特定值的列名。 感谢您提前提供帮助。

P粉738046172P粉738046172313 天前347

全部回复(1)我来回复

  • P粉765570115

    P粉7655701152023-12-12 00:03:09

    评论太长了。

    SQL 查询返回一组固定的列。您无法根据行更改设置。您可以使用准备好的语句来做您想做的事情,尽管这看起来像是一种神秘的方法。

    可以返回一个包含连接在一起的值的列。像这样的东西:

    select concat_ws(',',
                     (case when MissedCall = 1 then 'Missed Call' end),
                     (case when SponsoredCall = 1 then 'Sponsored Call' end),
                     . . .
                    )
    from useranalysisresult;

    这将在所设置的标志的单列中生成一个列表

    回复
    0
  • 取消回复