2013-01-25 51 views
1

我需要在MS Access 2010中創建一個查詢,該查詢將來自一列中4個不同表格的數據組合在一起。將來自4個表格的數據合併到一個列/字段中

表格定義如下;

Table 1: date, country, channel, calls_in 
Table 2: date, country, channel, calls_out 
Table 3: date, country, channel, email 
Table 4: date, country, channel, chat 

查詢應看起來像:

Query 1: Date, country, channel, contacts 

觸點柱應結合4種接觸類型(即calls_in /縮小,電子郵件和聊天),用於適當的日期,國家和信道。

所有4個表格都有相同的日期和國家。頻道是特定於每個表。

我一直在努力做到這一點,但無法擺脫困境。

回答

1

你可能會在此之後:

SELECT 
    all_contacts.date, 
    all_contacts.country, 
    all_contacts.channel, 
    "calls in: " & [calls_in] & ", calls out: " & [calls_out] & ", email: " & [email] & ", chat " & [chat] AS contacts 
FROM 
    ((((select date, country, channel from [Table 1] union 
     select date, country, channel from [Table 2] union 
     select date, country, channel from [Table 3] union 
     select date, country, channel from [Table 4]) AS all_contacts 
    LEFT JOIN [Table 1] ON (all_contacts.channel = [Table 1].channel) AND (all_contacts.country = [Table 1].country) AND (all_contacts.date = [Table 1].date)) 
    LEFT JOIN [Table 2] ON (all_contacts.channel = [Table 2].channel) AND (all_contacts.country = [Table 2].country) AND (all_contacts.date = [Table 2].date)) 
    LEFT JOIN [Table 3] ON (all_contacts.channel = [Table 3].channel) AND (all_contacts.country = [Table 3].country) AND (all_contacts.date = [Table 3].date)) 
    LEFT JOIN [Table 4] ON (all_contacts.channel = [Table 4].channel) AND (all_contacts.country = [Table 4].country) AND (all_contacts.date = [Table 4].date); 

由於MS-Access不支持全外連接,而不必像GROUP_CONCAT聚合函數,我左側的接合部包含UNION子查詢所有日期,國家和頻道與每個表格,然後我將所有聯繫人(calls_in,calls_out,電子郵件和聊天)合併到一個單元格中。

+0

修改了一點,但它的工作,謝謝! – Baton

1

使用UNION(隱含不同的)或UNION ALL

SELECT date, country, channel, 'calls_in' AS ContactType, calls_in AS ContactData 
FROM table1 
UNION ALL 
SELECT date, country, channel, 'calls_out', calls_out   
FROM table2 
UNION ALL 
SELECT date, country, channel, 'email', email 
FROM table3 
UNION ALL 
SELECT date, country, channel, 'chat', chat 
FROM table4; 

這會給你從四個表中的所有數據,並有新的列三類ContactTypecalls_incalls_outemailchat結合在一起與他們的數據。

+0

你可以通過字段改進聯繫人類型,並重命名聯繫人類型列,使其不會以'calls_in'結尾 – Fionnuala

+0

@Remou - 更新,謝謝。 –

+0

我正在考慮'選擇日期,國家,渠道,「調用」作爲聯繫人,calls_in AS ContactData' – Fionnuala

0

我想稍微改善馬哈茂德的回答:

SELECT date, country, channel, calls_in, 'Calls_in' as ContactType FROM table1 
UNION ALL 
SELECT date, country, channel, calls_out, 'Calls_out' as ContactType FROM table2 
UNION ALL 
SELECT date, country, channel, email, 'email' as ContactType FROM table3 
UNION ALL 
SELECT date, country, channel, chat, 'Calls_in' as ContactType FROM table4; 

但我必須說,這是顯而易見的,該數據庫可以與一些正常化做。如果你可以通過修改數據庫,你可以很容易地把所有的數據放在一張表中,並且只需要一個字段來跟蹤你使用的通信類型。

相關問題