2012-06-29 71 views
0

對不起,我遲了幾天,並沒有指定確切的表結構。請忽略上面的描述。我有更多的信息,因此我原來的問題沒有任何不再有效,因爲我得到關於我真正需要的,如下所述的更多信息:TSQL支持單列表

我有如下表(爲便於討論的簡化版本)。第一行是標題:

VariableID DocumentID Revision Value 
44   12   2   Val1 
45   12   2   Val2 
45   12   3   Val3 
44   13   1   Val4 
46   13   2   Val5 
47   14   1   Val6 

我想它(假設n行數)轉換爲用(DocumentId,修訂版)表中的下列分組:

Documentid revision variable1 (44) variable2 (45) variable3(46) variable(47) variable (n) 
12   2   Val1   Val2   null   null 
12   3   null   Val3   null   null 
13   1   Val4   null   null   null 
13   2   null   null   Val5   null 
14   1   null   null   null   Val6 

變量將數動態檢索。我不知道源表中有多少變量會作爲輸入。

請指教。

回答

0

PIVOT運算聽起來就像是你在找什麼,它既是Microsoft SQL Server和Microsoft Access中可用,我不知道它是否可以在Sybase雖然。下面是它的MSDN文章:T-SQL Pivot Operator

1

您沒有提供很多細節你目前的表結構或樣本數據。所以我會爲您提供一些PIVOT函數的樣本,它們將執行此操作。

有用於PIVOT兩個選項,一個靜態如果你知道這將讓列在運行時列表轉換列數轉換或動態。

編輯: 基礎上改變你的問題,你仍然可以執行PIVOT

的靜態支點應該是這樣的(Sql Fiddle sample):

select * 
from 
(
    select * 
    from t 
) x 
pivot 
(
    max(value) 
    for variableid in([44], [45], [46], [47]) 
) p 

動態透視看起來像這樣( Sql Fiddle Sample):

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(variableid) 
        from t 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SELECT @colsAlias = STUFF((SELECT DISTINCT ',' + QUOTENAME(m.variableid) + ' AS ' + QUOTENAME('variable' + cast(n.variableid as varchar(10))) 
    FROM t m INNER JOIN t n ON m.variableid = n.variableid 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') 


set @query = 'SELECT documentid, revision, ' + @colsAlias + ' from 
      (
       select * 
       from t 
      ) x 
      pivot 
      (
       max(value) 
       for variableid in (' + @cols + ') 
      ) p ' 

execute(@query) 
+0

謝謝。我在原始文章中發佈了我的問題的新描述,但是我無法列表數據,因此可能難以閱讀。 – user1491749

+0

@ user1491749請參閱我的編輯,您仍然可以使用PIVOT以您想要的格式獲取數據。 – Taryn

+0

謝謝。我嘗試了動態數據透視。我收到以下錯誤。這是逃避問題嗎?如果是這樣,我該如何逃避各自的專欄?消息105,級別15,狀態1,行1 字符串'variable47'後面的未引用的引號。 Msg 102,Level 15,State 1,Line 1 'variable47'附近語法不正確。 – user1491749