亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

支點動態列,沒有聚合

支點動態列,沒有聚合

繁星點點滴滴 2019-07-05 16:01:09
支點動態列,沒有聚合我有調查問卷的數據,SQLServer 2008,我想轉到一個矩陣。我看到了幾篇關于同一個話題的帖子,但我就是沒有興趣。表如下:Question tableAnswer tableCustomer table各欄:[CustomerID], [QuestionName_1], .., [QuestionName_n] <- 動態問題欄數目)數據:CustomerID, Answer_1, .., Answer_n檢索列的代碼:DECLARE @columns VARCHAR(8000)SELECT @columns = COALESCE(@columns + ',[' + cast(QuestionName as varchar) + ']', '[' + cast(QuestionName as varchar)+ ']')FROM Answer A  INNER JOIN Question Q ON A.QuestionID = Q.QuestionIDINNER JOIN Customer C ON A.CustomerID = C.CustomerIDGROUP B Y Q.QuestionNameSET @columns = '[CustomerID],' + @columnsDECLARE @query VARCHAR(8000)SET @query = 'Some PIVOT query without  aggregation'EXECUTE(@query)最初的查詢思想是從帶動力柱的樞軸.可以這樣做嗎?旋轉查詢會是什么樣的呢?PS:我不想使用排名與最大的列數。問候,米歇爾
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

是的,您可以執行動態支點。有時更容易計算出PIVOT首先使用靜態版本進行查詢,這樣您就可以看到查詢和結果將如何出現。然后將查詢轉換為動態版本。

下面是查詢的靜態版本和動態版本的示例:

靜態(SQL Fiddle):

select *from (
    select u.userid,
        u.fname,
        u.lname,
        u.mobile,
        r.question,
        r.choice    from users u    left join results r        on u.questionid = r.questionid        
        and u.choiceid = r.choiceid) xpivot(
    min(choice)
    for question in([are you], [from])) p

動態(SQL Fiddle):

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
            FROM results c            FOR XML PATH(''), TYPE            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from 
            (
                select u.userid,
                    u.fname,
                    u.lname,
                    u.mobile,
                    r.question,
                    r.choice
                from users u
                left join results r
                    on u.questionid = r.questionid
                    and u.choiceid = r.choiceid
           ) x
            pivot 
            (
                min(choice)
                for question in (' + @cols + ')
            ) p 'execute(@query)

如果您可以提供關于當前表結構的更多詳細信息,然后提供一些示例數據。我們應該能夠幫助您創建適合您的情況所需的版本。

不過,正如我所說的,有時從靜態版本開始比較容易,在靜態版本中,首先需要轉換列中的硬代碼,然后再轉到動態版本。


查看完整回答
反對 回復 2019-07-05
  • 1 回答
  • 0 關注
  • 483 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號