2011-04-18 57 views
0

我發現了很多這樣的零碎碎片,但我無法放在一起。這基本上是其中名稱是一個varchar表的想法,日期是一個日期時間,和數量是一個int將列動態添加到View或從存儲過程返回

Name | Date | Number 
A  1-2-11 15 
B  1-2-11 8 
A  1-1-11 5 

I'd like to create a view that looks like this 

Name | 1-2-11 | 1-1-11 
A  15  5 
B  8 

起初我使用的是臨時表,並追加每個日期行了。我在另一個論壇上看到這是一個主要資源。真的嗎?有一個更好的方法嗎?

+0

TSQL版本和平臺? – Hogan 2011-04-18 20:13:56

+1

您正在討論試圖使用動態數量的列進行透視。有關提示,請參閱:[http://www.sommarskog.se/dynamic_sql.html#Crosstab](http://www.sommarskog.se/dynamic_sql.html#Crosstab)。 – 2011-04-18 20:19:56

+0

@Hogan MS SQL 2005 – atatko 2011-04-18 20:20:19

回答

0

我會結合動態SQL與樞軸,我在this answer中提到。

0

如果日期列是已知集,那麼您可以在某些情況下使用數據透視表。

使用動態sql通常會更快,但這可能是非常危險的,所以要謹慎。

要真正知道什麼是最好的解決辦法是什麼,你的問題我們需要一些更多的信息 - 有多少數據 - 有多少變化在不同的列預期等

但是,這是事實, PIVOT和動態SQL都將比臨時表更快。

+0

在這個例子中,每當他們的值爲「name」時,每天都應該有一個條目。所以如果今天,他們檢查c,並且c有14個條目,那麼db中的相應行將是c 4-18-11 14.因此無法確定有多少日期可用。 – atatko 2011-04-18 20:18:03

+0

@atatko - 是的 - 在回答中被召集到會議中。 – Hogan 2011-04-18 21:04:06

+0

我一直在試圖爲此使用動態SQL,我認爲這應該工作。我也會考慮PIVOT。謝謝你的幫助。 – atatko 2011-04-19 12:52:53

0

您想查看「交叉表」或「主鍵」語句。在SQL Server 2005及其以上版本中,它的PIVOT,但是平臺之間的語法不一樣。

這是一個非常複雜的主題,特別是因爲隨着時間的推移數據不斷增加,您希望將列添加到視圖中。除了您的平臺的文檔,請查看主題上的無數其他SO帖子。

-1

我會用Access或Excel來代替T-SQL。

+0

-1 - 這是一個答案?問題不在於「還有什麼其他方法可以做到?」問題是如何在TSQL中完成它。 – Hogan 2011-04-18 21:13:58

+0

問題是'有更好的方法來做到這一點嗎?' – Beth 2011-04-18 22:08:50

+0

當然,通過任何推算,使用外部應用程序並不是一個更好的方法。這只是一種不同的方式。 – Hogan 2011-04-19 10:37:28