2010-12-09 65 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自行完成。