【问题标题】:Pivot Table with varchar values具有 varchar 值的数据透视表
【发布时间】:2015-01-26 08:42:12
【问题描述】:

这是我第一次使用它,我希望我能做到这一点,我快疯了。我仍然是所有这些使用 SQL 编程的新手,我正在尝试使用数据透视表将源表转换为所需的输出,如下所示。

这是我的源表

这是图片,我无法上传 (https://i.stack.imgur.com/KDStF.jpg)。

但无论我尝试什么,它都会返回数字,但我想要的 varchar 值,如上所示。 有谁知道如何实现它?

我在 Sql Server 中使用 Transact SQL,这是我的代码

SELECT [Ques1], [Ques2]
FROM
(
  SELECT
    D.DocumentId,
    DA.QuestionId,
    Q.ShortText, 
    DA.[Text],
    Q.SectionId, 
    1 as [Count]
-- ShortText is literally 'Ques1' or 'Ques2'
    FROM Document D
    INNER JOIN DocumentAnswer DA
    ON DA.DocumentId = D.DocumentId
    INNER JOIN Question Q
    ON Q.QuestionId = DA.QuestionId
    WHERE D.DeleteDate IS NULL
) d  
PIVOT
(
    Max(ShortText)
    FOR [Text] IN ([Ques1], [Ques2])
) p

【问题讨论】:

    标签: sql-server tsql pivot varchar


    【解决方案1】:

    SQL Fiddle

    MS SQL Server 2008 架构设置

    查询 1

    DECLARE @TABLE TABLE (DocID INT, Ques VARCHAR(100), Ans VARCHAR(100))
    INSERT INTO @TABLE VALUES 
    (1 , 'Ques1' , 'Hola'),
    (1 , 'Ques2' , 'Padr'),
    (2 , 'Ques1' , 'Excue'),
    (2 , 'Ques2' , 'Dir')
    
    SELECT * FROM
    ( -- Put your existing query here
     SELECT * FROM @TABLE
    ) t
      PIVOT (MAX(Ans)
             FOR Ques 
             IN ([Ques1],[Ques2])
             )p
    

    Results

    | DOCID | QUES1 | QUES2 |
    |-------|-------|-------|
    |     1 |  Hola |  Padr |
    |     2 | Excue |   Dir |
    

    【讨论】:

    • 非常感谢!太棒了!
    • 我知道这是一个旧答案,但无论如何......如果没有 DocID,只有 Ques 和 Ans 列怎么办?然后,对于每个 Ques(Ques1 和 Ques2),旋转将只取一个值,最小值或最大值,具体取决于所使用的聚合函数。是否可以全部显示?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多