簡體   English   中英

唯一行的SQL語句

[英]SQL statement for unique rows

我試圖從包含帳號,電話號碼和電子郵件的表中提取信息。 但是,我不確定設計這張桌子的人在想什么。 該表設置如下。

AccountID | PhoneType | 電話號碼

現在您可能會問電子郵件存儲在哪里。 它們存儲在電話號碼下。 此數據庫的一個示例。

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

只是建立在CodeLikeBeaker的響應上。

區別不會這樣做,因為使用案例旋轉時每條記錄都是唯一的。 但是,通過在每個案例和組中使用max()聚合,我們可以組合記錄。

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

如果電話類型是已知設置的限制,那么只需加入。 像這樣的東西:

SELECT DISTINCT a.AccountId,
       wp.PhoneNumber as WorkPhone,
       mp.PhoneNumber as MobilePhone,
       em.PhoneNumber as Email
    FROM MyTable As a
    LEFT JOIN (SELECT AccountId, PhoneNumber FROM MyTable
               WHERE PhoneType = 'WORK') As wp
         ON a.AccountId = wp.AccountId
    LEFT JOIN (SELECT AccountId, PhoneNumber FROM MyTable
               WHERE PhoneType = 'MOBILE') As mp
         ON a.AccountId = mp.AccountId
    LEFT JOIN (SELECT AccountId, PhoneNumber FROM MyTable
               WHERE PhoneType = 'EMAIL') As em
         ON a.AccountId = em.AccountId

暫無
暫無

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

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