mysql - 唯一行的 SQL 语句

标签 mysql database

我正在尝试从包含帐号、电话号码和电子邮件的表格中提取信息。但是,我不确定设计这张表的人在想什么。 table 是这样摆的。

账户ID |电话类型 |电话号码

现在您可能会问电子邮件存储在哪里。它们存储在电话号码下。此数据库的示例。

AccountID | PhoneType | PhoneNumber
123456        WORK        111-1111
123456        MOBILE      111-4567
123456        EMAIL     exampleemail@email.com
222222        EMAIL      stupid@table.com

我不确定如何执行此操作,因为我对 SQL 只有基本的了解。理想情况下,我们想要这样的东西:

AccountID | WorkPhone | MobilePhone | Email
123456       111-1111    111-4567     example@email.com
222222                                stupid@table.com

执行此操作的好方法是什么?我已经尝试了几个 IF 语句,但没有一个能让我达到我想要的效果。

最佳答案

像这样的东西会起作用。如果您有更多电话类型,这可能会很长:

编辑:根据 xQbert 的回复,他是正确的。您需要在帐户 ID 上添加一个分组依据,否则您仍然会得到多行。

SELECT
    AccountId
    , MAX(CASE WHEN PhoneType = 'WorkPhone' THEN
        PhoneNumber
      ELSE
        NULL
    END) AS 'WorkPhone'
    , MAX(CASE WHEN PhoneType = 'MobilePhone' THEN
        PhoneNumber
      ELSE
        NULL
    END) AS 'MobilePhone'
    , MAX(CASE WHEN PhoneType = 'Email' THEN
        PhoneNumber
      ELSE
        NULL
    END) AS 'Email'
FROM
    MyTable
GROUP BY AccountId

关于mysql - 唯一行的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47779502/

相关文章:

mysql - 使用 CONCAT 函数更新 mysql 字段?

php - 记住从数据库填充的用户复选框

python - 您最喜欢在 django 中管理数据库迁移的解决方案是什么?

.net - 使用 .Net 和 SQL Server 2005 保存/加载图片的最佳方式?

mysql根据当前项目选择相关项目

database - 测试自动化 - 初始化数据库状态

mysql - TIMEDIFF 子查询在 mariadb 中返回多于 1 行

php - 将mysql数据库中的一行值添加到动态表中

mysql - 如何在 Windows 上引导 MySQL?

mysql - MySQL 转储的完整数据库重置?