2013-05-17 4 views
2

Я экспортирую с SQL Server в Excel из сохраненного вида. В этом отношении он сортируется по двум столбцам (порядок от.)Экспорт из 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 
+0

Можете ли вы ** показать нам ** определение вида? (сценарий SQL, используемый для создания представления) –

+0

Пожалуйста, ** не ** ставьте образцы кода или образцы данных в комментарии - так как вы не можете отформатировать его, это чрезвычайно сложно ** читать ... Вместо: * * обновите ** свой вопрос, отредактировав его, чтобы предоставить дополнительную информацию! Спасибо. –

+0

Сделано! Спасибо! – whatever61

ответ

0

Извините, но вы не можете просто создать sproc с тем же результирующим?

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, но думаю, вы можете использовать sproc так же хорошо, как и представление.

+0

Я никогда не работал с хранимыми процедурами. После того, как я добавлю, что с ним делать? – whatever61

0

Как @Pondlife has correctly noted, если этот запрос в действительности является определение представления, необходимо указать ORDER BYпри выборе из этой точки зрения, то есть что-то вроде этого:

SELECT * 
FROM YourView 
ORDER BY ProductGroupID, Partner 
; 

или любой другой запрос выглядит так вы используете для фактической передачи данных.

ORDER BYв определение представления не дает вам фиксированного порядка набора результатов. На самом деле, это разрешено только там, потому что это положение TOP, и формальное смысл ORDER BY в этом случае установить правильный порядок строк для TOP пункта, но не для результата запроса, затем будет читаться с этой точки зрения.


Для фактического значения с использованием метода SELECT TOP 100 PERCENT + ORDER BY, вы можете посмотреть на эту тему: Why use Select Top 100 Percent?.

Смежные вопросы