2016-01-12 2 views
0

У меня возникли проблемы с установкой данных в таблицу в определенном порядке из другого table.I хотите заказать данные по колонке NiveauВставка into..Select с заказом по

Мой запрос как:

IF OBJECT_ID('tempdb..#DISPLAYVALUEALL') IS NOT NULL 
     DROP TABLE #DISPLAYVALUEALL 

SELECT 
    Ecritures.RecIdLine AS RecIdLine, 
    Ecritures.DISPLAYVALUEComb AS DISPLAYVALUEComb, 
    LevelTable.DIMENSIONATTRIBUTE AS DimAttribute, 
    LevelTable.LEVEL_   AS Niveau, 
    DimAttr.Name    AS Dim_Label 
INTO 
    #DISPLAYVALUEALL 
FROM 
    #BudgetTransTmp  As Ecritures    
INNER JOIN 
    #InterfacesParmTmp AS Tmp1 ON Tmp1.DATAAREAID = Ecritures.DATAAREAID 
INNER JOIN 
    MicrosoftDynamicsAx.dbo.DIMENSIONHIERARCHYLEVEL As LevelTable ON LevelTable.DIMENSIONHIERARCHY = Ecritures.ACCOUNTSTRUCTURE 
            AND LevelTable.PARTITION = @Partition 
            AND LevelTable.DIMENSIONATTRIBUTE IN (Tmp1.TaskCode, Tmp1.Activity, Tmp1.BudgetNature, Tmp1.CentreCout) 
INNER JOIN 
    MicrosoftDynamicsAx.dbo.DIMENSIONATTRIBUTE As DimAttr ON DimAttr.RECID = LevelTable.DIMENSIONATTRIBUTE 
           AND DimAttr.PARTITION = @Partition 
ORDER BY 
    RecIdLine,DISPLAYVALUEComb , Niveau ASC, DimAttribute DESC 

    --SELECT * from #DISPLAYVALUEALL 

Это не работает. Нельзя ли использовать заказ в инструкции select?

Это мой результат

ReciID  DisplayValue  Dimension Niveau 
5637157342 601200-001-026-- 22565421189 5 
5637157342 601200-001-026-- 22565421195 2 
5637157342 601200-001-026-- 22565421196 3 
5637157342 601200-001-026-- 22565421197 4 

5637157326 601200-001-027-- 22565421189 5 
5637157326 601200-001-027-- 22565421195 2 
5637157326 601200-001-027-- 22565421196 3 
5637157326 601200-001-027-- 22565421197 4 

Спасибо!

Update: мое решение, добавив следующую строку:

Row_number() over(ORDER BY Ecritures.RecIdLine, Ecritures.DISPLAYVALUEComb, LevelTable.LEVEL_ ASC, LevelTable.DIMENSIONATTRIBUTE DESC) as RowNumber, 

И мой сценарий становится:

IF OBJECT_ID('tempdb..#DISPLAYVALUEALL') IS NOT NULL 
      DROP TABLE #DISPLAYVALUEALL 
    SELECT Row_number() over(ORDER BY Ecritures.RecIdLine ,Ecritures.DISPLAYVALUEComb , LevelTable.LEVEL_ asc, LevelTable.DIMENSIONATTRIBUTE desc) as RowNumber, 
       Ecritures.RecIdLine  AS RecIdLine, 
       Ecritures.DISPLAYVALUEComb AS DISPLAYVALUEComb, 
       LevelTable.DIMENSIONATTRIBUTE AS DimAttribute, 
       LevelTable.LEVEL_   AS Niveau, 
       DimAttr.Name    AS Dim_Label 

     INTO #DISPLAYVALUEALL 
     FROM #BudgetTransTmp  As Ecritures    

      INNER JOIN #InterfacesParmTmp AS Tmp1 
       ON Tmp1.DATAAREAID   = Ecritures.DATAAREAID 

      INNER JOIN MicrosoftDynamicsAx.dbo.DIMENSIONHIERARCHYLEVEL  As LevelTable 
       ON LevelTable.DIMENSIONHIERARCHY = Ecritures.ACCOUNTSTRUCTURE 
       AND LevelTable.PARTITION   = @Partition 
       AND LevelTable.DIMENSIONATTRIBUTE IN (Tmp1.TaskCode,Tmp1.Activity, Tmp1.BudgetNature, Tmp1.CentreCout) 

      INNER JOIN MicrosoftDynamicsAx.dbo.DIMENSIONATTRIBUTE As DimAttr 
       ON DimAttr.RECID     = LevelTable.DIMENSIONATTRIBUTE 
       AND DimAttr.PARTITION    = @Partition 
       ORDER BY RowNumber 

Теперь данные упорядочены в таблице проверяю по:

SELECT * from #DISPLAYVALUEALL 
+1

Строки не логически упорядочены в таблице. Если вы хотите, чтобы ваш последний 'SELECT' отображал данные в определенном порядке, * это *, где вы должны добавить предложение' ORDER BY'. –

+0

Почему вы хотите заказать свои данные перед вставкой? –

+0

Потому что мне нужен этот орден во второй таблице. я нашел somthing проверить мое обновление – stoner

ответ

-1

Попробуйте изменить свой запрос выбора следующим образом и выполнить снова:

SELECT T.* 
    INTO #DISPLAYVALUEALL 
    FROM (SELECT 
     Ecritures.RecIdLine  AS RecIdLine, 
     Ecritures.DISPLAYVALUEComb AS DISPLAYVALUEComb, 
     LevelTable.DIMENSIONATTRIBUTE AS DimAttribute, 
     LevelTable.LEVEL_   AS Niveau, 
     DimAttr.Name    AS Dim_Label 

FROM #BudgetTransTmp  As Ecritures    

    INNER JOIN #InterfacesParmTmp AS Tmp1 
     ON Tmp1.DATAAREAID   = Ecritures.DATAAREAID 

    INNER JOIN MicrosoftDynamicsAx.dbo.DIMENSIONHIERARCHYLEVEL  As LevelTable 
     ON LevelTable.DIMENSIONHIERARCHY = Ecritures.ACCOUNTSTRUCTURE 
     AND LevelTable.PARTITION   = @Partition 
     AND LevelTable.DIMENSIONATTRIBUTE IN (Tmp1.TaskCode,Tmp1.Activity, Tmp1.BudgetNature, Tmp1.CentreCout) 

    INNER JOIN MicrosoftDynamicsAx.dbo.DIMENSIONATTRIBUTE As DimAttr 
     ON DimAttr.RECID     = LevelTable.DIMENSIONATTRIBUTE 
     AND DimAttr.PARTITION    = @Partition       

ORDER BY RecIdLine,DISPLAYVALUEComb , Niveau asc, DimAttribute desc) T 
+0

Спасибо, я думаю, что нашел что-то.Я обновил свой вопрос – stoner

+0

@stoner попытался использовать тот же принцип: сделать подзапрос – Khazratbek

+0

Я тестирую ваше решение, но он дает мне эту ошибку: 'Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и общей таблице выражения, если также не указаны TOP, OFFSET или FOR XML. ' – stoner

0

Существует не цель упорядочения вставки

В отсутствии порядка по отборному не имеет гарантированного заказа

Вам нужно переместить ORDER BY

SELECT * from #DISPLAYVALUEALL 
ORDER BY RecIdLine, DISPLAYVALUEComb , Niveau asc, DimAttribute desc 

или вы можете просто используйте

SELECT * from #DISPLAYVALUEALL 
ORDER BY RowNumber 
+0

Я использую это на данный момент: 'Row_number() over (ORDER BY Ecritures.RecIdLine, Ecritures.DISPLAYVALUEComb, LevelTable.LEVEL_ asc, LevelTable.DIMENSIONATTRIBUTE desc) как RowNumber,' я думаю, что порядок в порядке – stoner

+1

Я могу видеть что вы используете. Во второй раз «При отсутствии заказа по выбору нет гарантированного заказа». – Paparazzi