2011-04-07 42 views
2

我正在使用我沒有創建的數據庫,因此無法更改它 - 但是我正在使用查詢來提取我需要的數據 - 我有一個表有如下的條目。SQL查詢返回來自不均勻行的結果

12562 1 Orange 
12562 2 with skin 
12562 3 without skin 
12562 4 flesh only 
12563 1 Peach 
12563 2 by box 
12564 1 Strawberry 
12564 2 mixed 

我試圖得到在同一行上togther放置每件ID

12562 1 Orange 2 with skin 3 Without skin 4 flesh only 
12563 1 Peach 2 by box 

第一列是項目ID,所述第二基準和所述條目第三個數據 - 所有的產品都有一個參考1和2,所以得到這些行很容易 - 有一些有3然而,我最終只有1和2的數據或只有數據的條目,有1,2和3

任何人都可以給我一個正確的方向推動獲得一個完整的結果顯示所有記錄,但每行1個完整記錄的方法?

我想那一定是某種IF語句..

謝謝 - 對不起,絮絮叨叨。

尼爾

PS。對不起,是的,這是爲Microsoft SQL Server 2000上使用 - 8.00.760 Service Pack 3的

+0

使用它發現的存儲過程。這是聚合/連接字符串的情況下,按特定順序? – MatBailie 2011-04-07 11:43:26

+0

並且可以將不同數量的項目連接在一起? – MatBailie 2011-04-07 11:49:41

回答

1

使用左連接用於可選的引用:

select r1.Id, r1.Name, r2.Name, r3.Name, r4.Name 
from Entries r1 
inner join Entries r2 on r2.Id = r1.Id and r2.Reference = 2 
left join EntrieS r3 on r3.Id = r1.Id and r3.Reference = 3 
left join EntrieS r4 on r4.Id = r1.Id and r4.Reference = 4 
where r1.Reference = 1 

這將返回空值的字段那裏沒有匹配的記錄在左連接:

12562 Orange  with skin without skin flesh only 
12563 Peach  by box  NULL   NULL 
12564 Strawberry mixed  NULL   NULL 
+0

感謝Guffa - 效果很好 - 真的很感謝你在這方面的時間; o) – Neil 2011-04-07 14:13:31

0

的Oracle 11g具有的功能LISTAGG這一點。

其他DBMS中可能有類似的東西。

0

如果你使用MySQL,你可以使用group_concat

SELECT id, GROUP_CONCAT(CONCAT(reference, " ", data) SEPARATOR " ") as result 
FROM tablename 
GROUP BY id 
2

您應該使用PIVOT

SELECT 
     id, [1], [2], [3], [4] 
FROM (SELECT 
      id, data, reference 
      FROM yourtable 
     ) p PIVOT (min(data) FOR [reference] 
         IN ([1],[2],[3],[4]) 
       ) AS pvt 

爲SQL Server,因爲你沒有在你的問題註明)結果是

 
id  1    2    3     4 
12562 Orange  with skin  without skin  flesh only 
12563 Peach   by box  NULL    NULL 
12564 strawberry mixed   NULL    NULL 

更新 對於2005年之前的SQL服務器

運行在http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

execute crosstab 
      'select id from yourtable group by id', 
      'min(data)', 
      'reference', 
      'yourtable' 
+0

我覺得這是一個真正的白癡 - 這或那是那些日子之一..感謝仍然收到錯誤 - 無法解析,然後出現語法錯誤 - 將重新檢查一切。 – Neil 2011-04-07 13:00:53

+0

@Neil,你使用的是什麼MS-SQL-Server版本(* PIVOT僅在2005年以後可用*)? (*還需要使用你自己的字段和表名.. *) – 2011-04-07 13:07:24

+0

Aha會解釋它DOH - Microsoft SQL Server 2000 - 8.00.760 Service Pack 3 - 可能會很好的向你提及這個; o) - 感謝您的時間 - 任何建議? – Neil 2011-04-07 13:21:29