ORDER BY子句在使用SELECT INTO创建的表中不起作用

时间:2014-05-10 16:50:38

标签: sql sql-server sql-server-2012

您好我是SQL的新手,并且一直在通过反复试验来学习,但我已经走进了这个问题。我希望有人可以给我一个建议。

1)检查数据库中是否已存在表格,如果表格确实已删除[工作]

IF OBJECT_ID (N'PWC_L6_Daily',N'U') IS NOT NULL
DROP TABLE PWC_L6_Daily

2)使用同一数据库中原始表的SELECT INTO语句创建表,此语句中的ORDER BY子句无问题DESC或ASC [工作]

SELECT Time_Stamp,Plate_Number,OP_Tgt_Wgt_Difference AS Sample_Tgt_Wgt_Difference,Plate_Weight_Target,Plate_Geometry,OP_NOP_Wgt_Difference
INTO PWC_L6_Daily
FROM PWC_L6 
WHERE ((Time_Stamp BETWEEN '05/09/2014 07:00:00' And '05/10/2014 06:59:59') AND (OP_Tgt_Wgt_Difference BETWEEN -6 And 6) AND (NOP_Tgt_Wgt_Difference BETWEEN -6 And 6) AND (Plate_Number <> 0) AND (Plate_Geometry <> 'Error'))
UNION ALL
SELECT Time_Stamp,Plate_Number,NOP_Tgt_Wgt_Difference AS Sample_Tgt_Wgt_Difference,Plate_Weight_Target,Plate_Geometry,OP_NOP_Wgt_Difference
FROM PWC_L6
WHERE ((Time_Stamp BETWEEN '05/09/2014 07:00:00' And '05/10/2014 06:59:59') AND (OP_Tgt_Wgt_Difference BETWEEN -6 And 6) AND (NOP_Tgt_Wgt_Difference BETWEEN -6 And 6) AND (Plate_Number <> 0) AND (Plate_Geometry <> 'Error'))
ORDER BY Time_Stamp ASC

3)检查数据库中是否已存在表格,如果它确实丢弃了它[工作]

IF OBJECT_ID (N'PWC_L6_Report',N'U') IS NOT NULL
DROP TABLE PWC_L6_Report
4)使用SELECT INTO语句从先前用同一数据库中的SELECT INTO语句创建的表创建表,GROUP BY子句将起作用但它会给出一个随机顺序,ORDER BY子句将什么都不做。 [不订购]

SELECT MAX(Time_Stamp) AS Last_Produced,Plate_Number,COUNT(Plate_Number) AS Sample_Count,AVG(Sample_Tgt_Wgt_Difference) AS Avg_StT_Wgt_Difference,AVG(OP_NOP_Wgt_Difference) AS Avg_StS_Wgt_Difference,STDEV(Sample_Tgt_Wgt_Difference) AS Std_Dev_StT_Wgt_Difference
INTO PWC_L6_Report
FROM PWC_L6_Daily
GROUP BY Plate_Number
ORDER BY Last_Produced DESC

5)我做了以下的故障排除,发现第一个ORDER BY子句(第二步)影响PWC_L6_Report表,如果我改为ASC或DESC但是这个SELECT INTO语句中的第二个ORDER BY子句没有任何效果。 [临时声明]

SELECT Time_Stamp
INTO PWC_L6_Report
FROM PWC_L6_Daily
ORDER BY Time_Stamp DESC

我真的很感激任何建议。谢谢。

2 个答案:

答案 0 :(得分:1)

如何判断数据是否符合您的要求?声明:

select *
from table t

将数据作为无序结果集返回。您可以使用order by强制执行排序的唯一方法。您在SQL Server中按插入顺序获取数据。这是符合ANSI标准的行为,与几乎所有数据库的工作方式一致。如果您希望按特定顺序排列结果,请使用order by

order by有充分理由可用于insert。如果你这样做:

insert into t2(col1 . . .)
    select col1 . . . )
    from t
    order by col1;

然后标识列将按正确的顺序递增。 (这是一个很好的功能,但可能会减慢插入速度。)您可以在查询中使用row_number()获得类似的效果:

SELECT row_number() over (order by Time_Stamp desc) as id, Time_Stamp
INTO PWC_L6_Report
FROM PWC_L6_Daily;

现在,如果您愿意,可以order by id代替time_stamp

答案 1 :(得分:0)

排序依据仅用于展示目的。用于插入数据时,它不起作用。思考表设置。