【问题标题】:How can I return only one resultset from a pivot query in sql server?如何从 sql server 中的数据透视查询中只返回一个结果集?
【发布时间】:2009-08-15 13:43:38
【问题描述】:

我有以下 T-SQL Pivot 查询。

SELECT AccountNumber, EventID, 
        CreateDate, [ITEMBOOK] AS ITEMBOOK, 
        [POSTER] AS POSTER
FROM
    (SELECT ProductID, Quantity, EventID,AccountNumber,CreateDate
    FROM #tmpStartupItems) ps
    PIVOT
    (
    SUM (Quantity)
    FOR ProductID IN
    ( [ITEMBOOK], [POSTER])
    ) AS pvt

当我运行它时,它会返回两个结果集...有没有办法限制它只返回旋转后的结果集?

赛斯

【问题讨论】:

    标签: sql-server tsql pivot resultset


    【解决方案1】:

    什么是“两个结果集”?您应该只从单个 SELECT 语句(无论是否 PIVOT)中获取单个结果集。并且子查询中的 SELECT 不是第二个 SELECT 语句,它是一个表表达式(不同的东西),它应该只将它的数据返回给更大的调用 SELECT 语句。

    这里是 BOL 枢轴示例:

    -- Pivot table with one row and five columns
    SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
    [0], [1], [2], [3], [4]
    FROM
    (SELECT DaysToManufacture, StandardCost 
        FROM Production.Product) AS SourceTable
    PIVOT
    (
    AVG(StandardCost)
    FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
    ) AS PivotTable
    

    当我再次对 AdventureWorks 数据库执行此操作时,我只得到一个结果集,正如预期的那样。

    如果您获得的结果集不止一个,则 1) 此查询是一个更大的存储过程的一部分,该过程正在执行另一个查询并返回另一个结果集(因此更改存储过程),或者 2) 您感到困惑作为结果集的其他内容(例如 PRINT 语句),或者 3)您的 SQL Server 或访问工具存在严重问题。

    【讨论】:

    • 你是对的......存储的过程是返回两个选择语句......我错过了第一个。赛斯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多