0

我正在编写一份报告以返回有关我数据库中对象(“文件”)的详细信息。我的应用程序允许用户创建自己的标志以用于文件对象。标志基本上由一个名称组成,然后标志实例存储一个位值以指示它是否为父文件对象设置。

我想编写一个查询,该查询返回数据库中每个文件的一行,其中结果集中的前几列包含文件详细信息(id、名称、大小等),其余列是标志名称,并返回位值指示是否为给定的文件行设置了标志。

那有意义吗?我该如何编写查询?

谢谢你的帮助。

编辑:澄清..

作为此查询的一部分,我需要运行一个子查询来返回用户创建的标志(我在设计时不知道这些),然后在主查询中合并检查每个标志值以返回详细信息关于文件。

简化架构如下:

  • 文件 {Id,名称}
  • 标记 {Id,名称}
  • FileFlags {FileId, FlagId} - 此表中的一行表示为文件设置了标志

我需要查询来返回一个带有如下列的结果集:

FileId 文件 名 Flag1Name Flag2Name .... FlagNName

4

4 回答 4

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 
...
)
于 2009-04-18T13:55:43.983 回答
1

为什么不创建一个具有所需逻辑的存储过程——查询特定于用户的标志等——并在此基础上动态构建一个包含所需变量的查询字符串?

然后,您可以使用EXECUTE将动态查询集返回给用户。请参阅http://msdn.microsoft.com/en-us/library/ms188332.aspx

于 2009-04-18T14:37:09.813 回答
0

听起来您可能需要一个交叉表查询,您希望将行转换为列。标志是否作为与父表的一对多关系存储在单独的表中?

于 2009-04-18T13:48:01.303 回答
-1

我想你想要的是一个别名。这是来自http://www.sql-tutorial.net/SQL-Aliases.asp的示例

SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee 

我真的必须查看您的架构才能进一步提供帮助。

编辑 也许你需要嵌套SELECT的 s。 http://sqlzoo.net/1a.htm

于 2009-04-18T13:40:22.273 回答