【问题标题】:Applying PIVOT in T-SQL to get rows to column在 T-SQL 中应用 PIVOT 以获取行到列
【发布时间】:2015-12-12 17:54:04
【问题描述】:

我知道 earlier 也有人问过这个问题,但我似乎无法根据我的要求应用解决方案

我需要一个应用 PIVOT 以便这个表(从连接生成):

    Category    |   Tag     |   Title
    ----------------------------------
    First       |   Tag 1   |   Article 1
    Second      |   Tag 2   |   Article 1
    Third       |   Tag 4   |   Article 1
    First       |   Tag 1   |   Article 2
    Second      |   Tag 4   |   Article 2
    Third       |   Tag 5   |   Article 2
    First       |   Tag 1   |   Article 5
    Third       |   Tag 7   |   Article 5
    First       |   Tag 8   |   Article 7

变成:

    Title       |   First   |   Second  |   Third
    ---------------------------------------------
    Article 1   |   Tag 1   |   Tag 2   |   Tag 4
    Article 2   |   Tag 1   |   Tag 4   |   Tag 5
    Article 5   |   Tag 1   |   NULL    |   Tag 7
    Article 7   |   Tag 8   |   NULL    |   NULL    

这是我的查询:

    declare
        @cols nvarchar(max),
        @stmt nvarchar(max)

    select @cols = isnull(@cols + ', ', '') + '[' + T.CategoryTypeTitle + ']' from (select  CategoryTypeTitle from CategoryTypes) as T

    Select @stmt = '
    select Distinct * from
    (
        Select  
        C.CategoryTypeTitle, 
        A.* from Articles A 
        Join
        ArticleToTags AT on AT.ArticleID = A.ArticleID
        Join
        Tags T on T.CategoryID = AT.CategoryID
        Join
        CategoryTypes C on C.CategoryTypeID = T.CategoryTypeID
    ) src
    PIVOT
    (
        Count(Title) --**I need Tag Names (i.e. "Tag 1, Tag 2") instead of getting count or max etc**
        for [CategoryTypeTitle] in ('+ @cols +')
    ) as piv
    '
    Exec sp_executesql @stmt = @stmt

【问题讨论】:

    标签: sql-server tsql sql-server-2008-r2 pivot


    【解决方案1】:

    您已经设法将我认为是您的实际问题的问题深深地埋在了代码示例中。问题似乎是您只想获取一个字符串值,而您发现的大多数示例都使用COUNT()AVG()

    好吧,您总是必须使用聚合。所以你需要的是一个可以处理字符串的聚合。幸运的是,MIN()MAX() 确实如此,如果它们只被赋予一个值作为输入,那将是整个输出。

    所以只需使用MAX(Title) 而不是Count(Title)

    【讨论】:

    • 这正是我想要的。谢谢:)
    猜你喜欢
    • 2012-09-23
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2016-06-08
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多