2012-07-24 19 views
-1

下面是我需要從中提取數據的表 - 我只包括要在這個例子在這裏使用的列:請告訴我如何寫一個獨特的sql語句

Maintable

mainkey, account 
----------------- 
1, 100 
2, 200 
3, 300 

Childtable

linkedkeytomain, type, color 
--------------------------- 
2, b, blue 
2, y, yellow 
2, r, red 
2, g, green 
2, w, white 

我的目標是能夠寫一個選擇,將只表演O數據其中type = 'b' 和類型= 'W' 和type = 'R' 只有東北線:

例如,

Account, c1, c2, c3 
--------------------- 
200, blue, white, red 

可有人請告訴我如何獲得這個複雜的選擇。提前謝謝了。

blumonde

+3

'Childtable'中的每一行保證只有一個顏色和2個空值?對於具有相同外鍵的'Childtable'項目,顏色是否保證互斥? (也就是說2個物品都可以有c2)。您將給出一個沒有約束描述的示例輸出。 – Dima 2012-07-24 18:10:26

+0

您使用的是什麼RDBMS? – 2012-07-24 18:24:57

+2

http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/或使用數據透視表(但是這將是困難的,因爲你的值不整數...) – 2012-07-24 18:25:25

回答

1

你的問題是,你需要透視組。這裏有一個簡單的方法:

select account, 
     max(case when seqnum = 1 then color end) as color1, 
     max(case when seqnum = 2 then color end) as color2, 
     max(case when seqnum = 3 then color end) as color3 
from (select account, color, 
      row_number() over (partition by account order by color) as seqnum 
     from maintable mt join 
      childtable ct 
      on ct.linkedkeytomain = mt.mainkey 
    ) t 
group by account 
+0

假設我們知道有多少種顏色......但是啊!感謝您展示整個代碼。劃分它是一個好主意。 – 2012-07-24 18:55:17

+0

另外假定SQL Server 2005+ – Lamak 2012-07-24 18:56:51

+0

它假定您知道分配給某個帳戶的最大顏色數量。如果你不需要動態SQL來創建查詢,或者使用一個技巧來將一組中的顏色連接在一起。 – 2012-07-24 18:57:55