2017-01-09 45 views
0

給你一個簡要的總結 - 我想:

1.加入兩張表,包含地址簿信息,

2.連接'電話號碼區號'和'電話號碼'(因爲它們是存儲在我們數據庫的不同列中)

3.如果第1列中的「地址簿#」重複出現,請讓信息出現在同一行(例如,請參閱下文)。如何在SQL中動態地將行轉換爲列?


下面是表和字段我使用:表1(ABC_F0115)

領域:
'地址簿#'
'電話類型'
「電話區代碼'
「電話號碼'

表2中的字段(ABC_F0 101):
'地址簿#'
'通訊簿類型'

我現在的SQL是:

SELECT WPAN8 'Address Book#', WPPHTP 'Phone Type', WPAR1 'Phone Area Code', WPPH1 'Phone Number', ABAT1 'Address Book concat('(',LTRIM(RTRIM(WPAR1)),')', ' ', WPPH1) AS 'Full Phone Number' FROM ABC.F0101 JOIN ABC.F0115 ON WPAN8=ABAN8 WHERE ABAT1='AR'; 



它返回一個類似於表如下:


|地址簿#| PhoneType | PhoneAreaCode |電話號碼|
| ___________ _ _________ _ _____________ _ ___________ |
| 2160 ________ |細胞______ | 000 __________ | 000-0000 _____ |
| 2160 ________ | Fax______ | 111 __________ | 111-1111 ______ |
| 2161 ________ |細胞______ | 222 __________ | 222-2222 _____ |
| 2161 ________ | Fax______ | 333 __________ | 333-3333 _____ |
| 2162 ________ | Home____ | 444 __________ | 444-4444 _____ |


不過,我想返回的表的樣子:


|通訊錄#| PhoneType1 |電話#1 | PhoneType2 |電話#2 | PhoneType3 |電話#3 |
| ___________ _ _________ _ _______ _ _________ _ _________ _ _______ _ _______ |
| 2160 ________ |細胞_______ | 000-0000 |傳真_______ | 111-1111_ | ___________ | ________ |
| 2161 ________ |細胞_______ | 222-2222 |傳真_______ | 333-3333 | ___________ | ________ |
| 2163 ________ |首頁_____ | 444-4444 |傳真_______ | 333-3333 | ___________ | ________ |


我知道我有我行轉成列的動態......但我不能完全弄清楚我的SQL。有什麼建議麼?

+0

請標註RDMS。沒有兩種SQL方言是相同的。 – Parfait

回答

0

我想那是你鎖定的東西嗎?

WITH Result AS (
    SELECT 
     WPAN8, 
     WPPHTP, 
     WPPH1 'Phone Number', 
     ROW_NUMBER() OVER (PARTITION BY WPAN8, ORDER BY WPPHTP,WPPH1) AS CallRowNumber 
    FROM ABC.F0101 
    JOIN ABC.F0115 ON WPAN8=ABAN8 
    WHERE ABAT1='AR'; 
) 
SELECT 
    WPAN8 'Address Book#', 
    Resutl1.WPPHTP AS 'Phone Type1', 
    Resutl1.WPPH1 'Phone Number1', 
    Resutl2.WPPHTP AS 'Phone Type2', 
    Resutl2.WPPH1 'Phone Number2', 
    Resutl3.WPPHTP AS 'Phone Type3', 
    Resutl3.WPPH1 'Phone Number3', 
FROM ABC.F0101 
LEFT JOIN Result AS Resutl1 ON Resutl1.WPAN8=ABAN8 AND CallRowNumber = 1 
LEFT JOIN Result AS Resutl2 ON Resutl2.WPAN8=ABAN8 AND CallRowNumber = 2 
LEFT JOIN Result AS Resutl3 ON Resutl3.WPAN8=ABAN8 AND CallRowNumber = 3 

由於我不知道您使用了哪種SQL語法,因此我使用SQL Server(TSQL)完成了它。