2013-02-01 35 views
3

我想創建一個查詢從多個記錄作爲一個記錄,但我不想使用Pivot,FYI,我有> 260記錄,這是不可能的,如果我寫手冊PIVOT, 是否有任何簡單的解決方案?查詢結果爲逗號分隔字符串而不使用PIVOT?

這裏的表舉例:

ID Element_Name Value 
1 Parmitha  100 
2 Anggun  200 
3 Chandra  300 
4 BagusofTerror 400 
5 Laras   500 
6 Jessica  600 
7 Aisyah  700 
...... 
200 Sonya   20000 

,我想結果是這樣的:

paramitha , anggun, chandra , bagusofterror, Laras , Jessica , Aisyah, ..... , Sonya 
100 , 200, 300, 400,500,600,700,....,20000 
+0

所以...你想要在不使用樞軸運算符的情況下轉動數據嗎? –

+0

不,我不想要一個數據透視運算符,有沒有解決方案? – Sabilv

+0

還有一些方法可以使用pivot操作符,而無需手動全部寫出,但通常需要動態查詢。 http://www.simple-talk.com/blogs/2007/09/14/pivots-with-dynamic-columns-in-sql-server-2005/ –

回答

0

我們曾經稱之爲交叉表查詢。不知道它是否仍然是...

SELECT SUM(CASE WHEN id=1 THEN value ELSE 0 END) AS parmitha, 
    SUM(CASE WHEN id=2 THEN value ELSE 0 END) AS anggun, 
    SUM(CASE WHEN id=3 THEN value ELSE 0 END) AS chandra, 

    ...etc... 

    SUM(value) AS total 
FROM My_Table 
WHERE ...etc... 

我不知道C#,但我相信你可以得到它循環的列準備SUM()。

0

這個我如何對你提供的樣本數據集進行嘗試。

declare @intFlag int 
Declare @AnsString nvarchar(2000) 

SET @intFlag=1 
SET @AnsString='' 

While (@intFlag<=200) 
Begin 
    Select @[email protected] 
         +CONVERT(Varchar(20),(SELECT [Element_Name] 
               FROM TABLE where [email protected])) 
       +', ' 
SET @[email protected]+1 
if @intFlag=199 
break; 
END 
Print @AnsString 
--Select @AnsSTring 
0

如果你想在單獨的列這個數據,那麼你可以在SQL Server 2005+使用動態SQL PIVOT數據。您的代碼與此類似:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(element_name) 
        from yourtable 
        group by element_name, id 
        order by id 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query 
    = 'select '[email protected]+' 
     from 
     (
     select Element_name, Value 
     from yourtable 
     ) p 
     pivot 
     (
      max(value) 
      for Element_name in('[email protected]+') 
     ) piv' 

execute(@query) 

請參閱SQL Fiddle with Demo。這給出了結果:

| PARMITHA | ANGGUN | CHANDRA | BAGUSOFTERROR | LARAS | JESSICA | AISYAH | SONYA | 
---------------------------------------------------------------------------------- 
|  100 | 200 |  300 |   400 | 500 |  600 | 700 | 20000 | 
相關問題