2013-11-27 4 views
-1

Я написал динамический SQL Pivot Query, который возвращает количество в день, число возвращенных столбцов динамическое в зависимости от количества дней между параметрами открытия. Проблема, с которой я сталкиваюсь, заключается в том, что в столбцах нет DateOrder, я предполагаю, что мне нужна какая-то форма или Order By, чтобы исправить это, есть ли у кого-нибудь идеи, в которых мне нужно было бы вставить его?SQL Dynamic Pivot

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 

    --declare and set variables 
    DECLARE @v_Columns VARCHAR(MAX) 
    ,@v_StartDate DATETIME = GETDATE() - 10 
    ,@v_EndDate DATETIME = GETDATE() 
    ,@v_Query VARCHAR(max) 

--select results 
SELECT @v_Columns = Coalesce(@v_Columns, '[') + convert(VARCHAR, cast(DateCreated AS DATE), 111) + '],[' 
FROM (
    SELECT DISTINCT cast(DateCreated AS DATE) AS DateCreated 
    FROM TransactionOriginTracking 
    ) tot 
WHERE tot.DateCreated BETWEEN @v_StartDate 
     AND @v_EndDate 

SET @v_Columns = SUBSTRING(@v_Columns, 1, Len(@v_Columns) - 2) 
SET @v_Query = 'select 
    * 
from 
(
SELECT 
    cast(Tracking.DateCreated as date) as [Date], 
    th.TotalQuantity [Quantity] 
FROM 
    TransactionHeader th 
    Inner JOin TransactionOriginTracking as Tracking on Tracking.TransactionHeaderId = th.Id 
     and Tracking.WorkflowStageId = 9 
    Inner Join CompanyDivision on CompanyDivision.Id = th.CompanyDivisionId 
WHERE 
    Tracking.DateCreated between ''' + CONVERT(VARCHAR(50), @v_StartDate, 111) + ''' AND ''' + CONVERT(VARCHAR(50), @v_EndDate, 111) + ''' 
) as src 
Pivot 
(
SUM(src.Quantity) 
For src.Date IN (' + @v_Columns + ') 
) as PivotView' 

EXEC (@v_Query) 

ответ

1

Когда вы строите свой список столбцов, сортировка по дате:

--select results 
SELECT 
    @v_Columns = Coalesce(@v_Columns, '[') + convert(VARCHAR, cast(DateCreated AS DATE), 111) + '],[' 
FROM 
    (SELECT DISTINCT 
     CAST(DateCreated AS DATE) AS DateCreated 
    FROM 
     TransactionOriginTracking) tot 
WHERE 
    tot.DateCreated BETWEEN @v_StartDate AND @v_EndDate 
ORDER BY 
    tot.DateCreated