2011-11-08 40 views
0

我有兩個表(處理SQL)如何在連續使用SQL創建主詳細?

table1 
------ 
ID 
NAME 
ADDRESS 

table2 
------- 
ID 
PHONE 
EMAIL 

哪能像使用SQL Server 2005 Express的這個

------------------------------------ 


01 Dave 123 Veneu 

    555-5 [email protected] 
    66-66 [email protected] 
    213-1 [email protected] 


02 John 23 Park 

    322-1 [email protected] 
    54-23 [email protected] 
    231-2 [email protected] 

IM創建的報告,,謝謝提前。

+1

你的數據模型是否正確?電子郵件地址和電話號碼處於「1-1」關係很少見。 –

回答

1

不知道爲什麼你真的願意在除報表設計等什麼寫這篇文章,但只是爲了它的地獄:

SELECT ID AS Column1, NAME AS Column2, Address AS Column3, ID AS SortColumn1, 1 AS SortColumn2 
UNION 
SELECT '', PHONE, EMAIL, ID AS SortColumn1, 2 AS SortColumn2 
ORDER BY SortColumn1, SortColumn2 

輸出將基本上是胡言亂語的負荷真的,並且你已經有了兩個額外的列來擺脫。

0

爲了有一個一對多的關係,因爲在你的例子(一個人有多個電話和電子郵件),你需要某種形式的鏈接欄添加到第二個表,該表將包含的標識電子郵件/電話所屬的人。

所以,你的表結構應該是這樣的:

table1 
------ 
ID 
NAME 
ADDRESS 

table2 
------- 
ID 
TABLE1_ID 
PHONE 
EMAIL 

然後,您可以使用連接查詢數據:

SELECT table1.name, table1.address, table2.phone, table2.email WHERE table2.table1_id = table1.id 
1

你不應該。這是一個一般原則,格式化不應該在數據庫層來完成。

SQL Server應該用於生成數據,然後你的應用程序應該處理數據,包括格式。

我就開兩個查詢。一個加載表1,由ID列排序。另一個是裝載表格2,也是由ID列指定的。然後,您可以在同一時間通過兩個記錄集循環,類似下面的僞代碼...

rs1 = SQL.Execute("SELECT * FROM table1 ORDER BY ID") 
rs2 = SQL.Execute("SELECT * FROM table2 ORDER BY ID, phone") 

rs2.Next() 
WHILE rs1.Next() 
    Output The Address Info Here 
    WHILE rs1.ID = rs2.ID 
    Output The Phone/Email Info Here 
    rs2.Next() 
    END WHILE 
END WHILE 
0

我強烈機電工程署署長同意,但如果你真的需要拿出類似的東西時,以下可以工作(儘管沒有空行)

SELECT case 
      when group_rn = 1 then id 
      else '' 
     end as id, 
     case 
      when group_rn = 1 then name 
      else phone 
     end as name_phone_column, 
     case 
      when group_rn = 1 then address 
      else _email 
     end as address_email_column 
FROM (
    SELECT t1.id, 
      t1.name, 
      t1.address, 
      t2.email, 
      t2.phone, 
      row_number() over (partition by t1.id order t1.name) as group_rn 
    FROM table1 t1 
     LEFT JOIN table2 t2 ON t1.id = t2.id 
) t 
ORDER BY id 

這假定phonename都具有相同的數據類型,就像addressemail