我正在编写一份报告,以便在我的数据库中返回有关对象('files')的详细信息。我的应用程序允许用户创建自己的标志以用于文件对象。标志基本上由一个名称组成,然后标志实例存储一个位值,以指示它是否为父文件对象设置。
我想编写一个查询,在数据库中每个文件返回一行,其中结果集中的前几列包含文件详细信息(id,name,size等),其余列是标志名称,返回的位值表示是否为给定的文件行设置了标志。
这有意义吗?我该如何编写查询?
感谢您的帮助。
编辑:澄清..
作为此查询的一部分,我需要运行一个子查询,该子查询返回用户创建的标志(我在设计时不知道这些标志),然后在主查询中包含对每个标志值的检查返回有关文件的详细信息。
简化架构如下:
我需要查询返回包含以下列的结果集:
FileId FileName Flag1Name Flag2Name .... FlagNName
答案 0 :(得分:1)
您可以从查看SQL Server 2005+中提供的Pivot函数开始。有了这个和一些字符串连接,你应该能够为任意数量的列组装一个查询
根据您的评论,您的选择将如下所示:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>, ...
From Table
PIVOT (
...
FOR
...
)
答案 1 :(得分:1)
为什么不使用所需的逻辑创建存储过程 - 查询用户特定的标志等 - 并在此基础上动态地使用您需要的变量构建查询字符串?
然后,您可以使用EXECUTE
将动态查询集返回给用户。见http://msdn.microsoft.com/en-us/library/ms188332.aspx
答案 2 :(得分:0)
听起来好像您需要一个交叉表查询,您希望将行转换为列。标志是否作为与父表的一对多关系存储在单独的表中?
答案 3 :(得分:-1)
我认为你想要的是别名。以下是http://www.sql-tutorial.net/SQL-Aliases.asp
的示例SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee
我真的必须看到你的架构有助于进一步发展。
修改强>
也许你需要嵌套的SELECT
。
http://sqlzoo.net/1a.htm