Sql server 插入到..按顺序选择
我在从另一个表按特定顺序将数据插入表时遇到问题。我需要按列排序的数据Sql server 插入到..按顺序选择,sql-server,tsql,ssis,sql-order-by,dynamics-ax-2012,Sql Server,Tsql,Ssis,Sql Order By,Dynamics Ax 2012,我在从另一个表按特定顺序将数据插入表时遇到问题。我需要按列排序的数据Niveau 我的问题是: IF OBJECT_ID('tempdb..#DISPLAYVALUEALL') IS NOT NULL DROP TABLE #DISPLAYVALUEALL SELECT Ecritures.RecIdLine AS RecIdLine, Ecritures.DISPLAYVALUEComb AS DISPLAYVALUEComb, Level
Niveau
我的问题是:
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 into语句中使用order by是否非法
这是我的结果
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
谢谢
更新:我的解决方案是添加以下行:
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
现在,数据在表I中排序,检查方式为:
SELECT * from #DISPLAYVALUEALL
尝试按以下方式更改select查询并再次执行:
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
订购插入件没有任何目的 在没有订单的情况下,select没有保证订单 您需要将订单移动到
SELECT * from #DISPLAYVALUEALL
ORDER BY RecIdLine, DISPLAYVALUEComb , Niveau asc, DimAttribute desc
或者你可以用
SELECT * from #DISPLAYVALUEALL
ORDER BY RowNumber
表中的行不是按逻辑顺序排列的。如果希望最后一个
选择
以特定顺序显示数据,则应在此处添加order BY
子句。为什么要在插入之前对数据进行排序?因为我需要在第二个表中使用此order。我发现一些东西检查我的更新,就像我说的,数据在表中没有排序。(如果您有一个聚集索引,那么数据可以按该顺序进行物理存储,这可能有助于提高效率,但仍然不能保证它会以SELECT
语句的顺序出现。)如果您在没有orderby
的情况下执行SELECT
,那么服务器可以按照它认为合适的任何顺序向您提供数据,这一点可以从一分钟变到下一分钟。您只需将ORDER BY
放在SELECT
上,就可以获得所需的排序结果,这有什么问题?您的“解决方案”可能随时都会失效。正如我所说,如果在SELECT
语句中没有orderby
,服务器可以按任意顺序返回行。只是因为它是按照你今天想要的顺序出现,并不意味着它明天就会按照你想要的顺序出现。谢谢你,我想我找到了一些东西。我更新了我的question@stoner尝试使用相同的原则:生成子查询I测试您的解决方案,但它会给我以下错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。
@stoner首先,尝试在不使用INTO命令的情况下执行sql查询,只需selection@stoner它能给你结果吗?如果否,则表示select query不正确。我目前使用的是:Row_number()(按Ecritures.RecIdLine、Ecritures.DISPLAYVALUEComb、LevelTable.LEVEL uuu asc、LevelTable.DIMENSIONATTRIBUTE desc排序)作为RowNumber,
我认为顺序正确。我可以看到您在使用什么。这是第二次“如果select没有订单,则没有保证订单”。