2010-12-09 118 views
0

對不起,我不知道這是如何調用的,所以我也不知道如何谷歌它。我會試着解釋我需要什麼。有一個標準的場景,我有某種對象存儲表,還有另一個包含對象屬性的表。一個對象可能與許多屬性相關聯。所以基本上當你需要一個對象的所有數據時,你將加入屬性表並接收很多行。在一個scenarion,我在同一時間查詢大量的對象,做一個子查詢中選擇一個屬性:sql選擇多行到一列

SELECT basic data, 
(SELECT some attribute from attributes table) AS attribute1 
FROM objects table 
JOIN something 
JOIN something 
... 

一切都OK,但我需要選擇從該列表了更多的屬性。什麼是最佳的方式呢?我認爲寫2個以上的子查詢不是一個好主意。我聽說過t-sql中的一些pivot函數,但我不確定這是否是我需要的。理想情況下,屬性將作爲新列以單行形式返回,幷包含所有其他數據,屬性名稱是新列名稱,屬性文本是新列值。但屬性名稱可能包含空格等,所以我不確定它們是否可以用作列名稱,或者是否可以執行這樣的選擇。

SQL是微軟的,但它會很高興有一些解決方案可以支持其他數據庫引擎。

讚賞任何指針或谷歌關鍵詞]

+0

請寫一個例子的輸入和所希望的輸出。 – 2010-12-09 12:16:02

回答

0

Pivot是不是你所需要的。

不要害怕多行,它通常很快。只需使用一些O/RM(NHibernate或EF)。如果您有性能問題,您可以隨時使用NHProf調整您的查詢。

沒有O/RM還有其他兩個選項:

  • 問題的XML子查詢和檢索作爲XML列表列的所有屬性。

  • 發出兩個查詢並在客戶端進行排序。 ADO.NET DataSets內置此功能。或者您可以使用IDataReader自行完成。