2009-04-18 49 views
0

我正在寫報告以返回有關數據庫中對象('文件')的詳細信息。我的應用程序允許用戶創建自己的標誌以用於文件對象。標誌基本上由一個名稱組成,然後標誌實例存儲一個位值以指示它是否爲父文件對象設置。SQL的問題..我如何動態添加列到SQL查詢結果集?

我想編寫一個查詢,每個文件在數據庫中返回一行,其中結果集中的前幾列包含文件詳細信息(id,name,size等),其餘列是標誌名稱,並返回位值,以指示是否爲給定文件行設置標誌。

這有道理嗎?我如何着手編寫查詢?

感謝您的任何幫助。

編輯:澄清..

由於此查詢的一部分,我需要運行一個子查詢,返回已經由用戶創建的標誌(我不知道這些在設計時),然後合併檢查主查詢中的每個標誌值以返回有關文件的詳細信息。

了簡化的架構如下:

  • 文件{ID,名稱}
  • 標誌{ID,名稱}
  • FileFlags {FILEID,FlagId} - 在這個表中的行指示標誌設置文件

我需要查詢返回的列是這樣的一個結果集:

FILEID文件名Flag1NameFlag2Name .... FlagNName

回答

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

我想你想要的是一個別名。下面是從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

+0

沒有遺憾,那不是什麼即時通訊之後。我需要一個動態查詢,其中子查詢的結果構成主要查詢的一部分。我沒有看到什麼別名與它有關... – MalcomTucker 2009-04-18 13:44:34

0

聽起來或許你需要一個交叉表查詢,你想把行轉換爲列。這些標誌是否作爲與父表的一對多關係存儲在單獨的表中?

+0

是的,他們被存儲爲1-M在單獨的表 – MalcomTucker 2009-04-18 13:49:52

+0

我認爲你想要做一個連接也許,而不是一個子查詢,然後使用交叉表報告進程轉換行到列。 這個問題可能會發生,因爲每個你想要的行都可能有不同的列,因爲每個列都有不同的標誌,所以不知道如何將它們作爲唯一的列返回到所有行中。 – schooner 2009-04-18 13:54:59

+0

你對不同列的潛在問題是正確的,但即時通訊非常高興將所有標誌作爲列返回,然後只是表明它們是否設置,如果這是有道理的......我的SQL技能不是很高: – MalcomTucker 2009-04-18 14:02:33

1

爲什麼不創建與存儲過程所需的邏輯 - 查詢用戶特定的標誌等 - 並在此基礎上動態構建一個包含所需變量的查詢字符串?您可以使用EXECUTE將動態查詢集返回給用戶。見http://msdn.microsoft.com/en-us/library/ms188332.aspx