2013-08-20 44 views
0

我想設置一個像下面這樣的pivot語句,但不是傳遞列值,而是隻想讓它返回所有值;我要離開括號底部空(即總和(fldNI)FOR fldCI IN()....具有指定值的SQL樞軸

SELECT * 
    FROM  
(
    SELECT fldPK 
      ,fldFPK 
      ,fldNI 
      ,fldCI 
    FROM qryOne 
) as x 
PIVOT 
(
    Sum(fldNI) FOR fldCI IN() 
) as p 

回答

0

當您使用PIVOT函數的值必須按順序將它們轉換成被稱爲如果你事先不知道這些值,那麼你將不得不實現動態SQL來獲得結果,動態SQL代碼將創建將被轉換爲列的值列表,然後將該列表連接到被執行的查詢字符串

的代碼將類似於:

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

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

set @query = 'SELECT fldPK, fldFPK, ' + @cols + ' 
      from 
      (
       SELECT fldPK 
        ,fldFPK 
        ,fldNI 
        ,fldCI 
       FROM qryOne 
      ) x 
      pivot 
      (
       sum(fldNI) 
       for fldCI in (' + @cols + ') 
      ) p ' 

execute sp_executesql @query 
+0

謝謝你的幫助,我只是編輯我的帖子,包括我正在處理的全部範圍。我一直在試圖弄清楚如何讓所有的代碼動態工作,但它不會工作。 – codingManiac

+0

@tripleddev如果你有另一個問題,那麼你應該發佈一個新的問題,不要編輯你的原始問題。但是你不能在一個函數中包含動態SQL。我已回滾您的更改,請發佈有關內聯函數詳細信息的新問題 – Taryn