【问题标题】:Export from SQL Server to Excel with order by按顺序从 SQL Server 导出到 Excel
【发布时间】:2013-05-12 16:49:11
【问题描述】:

我正在从保存的视图中从 SQL Server 导出到 Excel。在该视图中,它按两列排序(排序依据..)

但是当我导出它时,它在 Excel 中是随机排序的。

如何按顺序导出?

这是视图的查询:

SELECT     TOP (100) PERCENT GETDATE() AS Date, MixStatusID AS Partner, SUM(CAST(Weight AS 
float)) AS Weight, SUM(CAST(TotalCostPrice AS float)) AS TotalCost, ProductGroupID
FROM         dbo.D_ParcelLocation
WHERE     (ParcelStatusID IN (N'stock', N'memo', N'transfer', N'analyze_un')) AND (ParcelTypeID <> N'M') AND (ProductGroupID <> N'G_POL') AND (ProductGroupID <> N'G_ROU')
GROUP BY MixStatusID, ProductGroupID
HAVING      (SUM(CAST(Weight AS float)) > 0)
ORDER BY ProductGroupID, Partner

【问题讨论】:

  • 您能向我们展示视图定义吗? (用于创建视图的 SQL 脚本)
  • 不要将代码示例或示例数据放入 cmets - 因为您无法对其进行格式化,所以阅读它非常困难....而是:更新您的问题,编辑它以提供附加信息!谢谢。
  • ORDER BY 在视图中不起作用(请参阅this questiondocumentation)。如果要排序结果,则必须在查询中使用 ORDER BY
  • 什么版本的 SQL Server?
  • 对不起,我不在:SQL 2008 R2,我正在尝试将其添加到导出查询中,如下所示:CREATE TABLE Z_STOCK_PARTNERS_2 (Date DateTime, ProductGroupID LongText) 按@排序987654329@ 但它告诉我语法错误

标签: sql-server excel sorting export


【解决方案1】:

抱歉,您不能只创建一个具有相同结果集的存储过程吗?

create procedure sp_D_ParcelLocation_s as
begin 
    SELECT     TOP (100) PERCENT GETDATE() AS Date
                , MixStatusID AS Partner
                , SUM(CAST(Weight AS float)) AS Weight
                , SUM(CAST(TotalCostPrice AS float)) AS TotalCost
                , ProductGroupID
    FROM        dbo.D_ParcelLocation
    WHERE       (ParcelStatusID IN (N'stock', N'memo', N'transfer', N'analyze_un')) 
    AND         (ParcelTypeID <> N'M') 
    AND         (ProductGroupID <> N'G_POL') 
    AND         (ProductGroupID <> N'G_ROU')
    GROUP BY    MixStatusID, ProductGroupID
    HAVING      (SUM(CAST(Weight AS float)) > 0)
    ORDER BY    ProductGroupID, Partner
end

也许这行不通?我不经常像这样使用 Excel,但我认为您可以使用存储过程和视图。

【讨论】:

  • 我从来没有使用过存储过程。我添加它之后,如何处理它?
【解决方案2】:

作为@Pondlife has correctly noted,如果该查询实际上是一个视图定义,您需要在从该视图中选择时指定一个ORDER BY,即:

SELECT *
FROM YourView
ORDER BY ProductGroupID, Partner
;

或任何您用于实际传输数据的查询。

ORDER BYin 视图定义没有为您提供结果集的固定顺序。事实上,它只允许在那里因为有一个TOP 子句,而在这种情况下ORDER BY 的正式1 含义是为@987654328 设置正确的行顺序 @ 子句,但不适用于将从该视图读取的查询结果。


1对于使用SELECT TOP 100 PERCENT + ORDER BY 技术的实际 含义,您可以查看此线程:Why use Select Top 100 Percent?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多