你好,我是一个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子句将不起任何作用。[不执行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)我执行了以下故障排除操作,发现如果我更改为ASC或DESC,则第一个ORDER BY子句(在第2步中)会影响PWC_L6_Report表,但此SELECT INTO语句中的第二个ORDER BY子句根本不起任何作用。[临时语句]
SELECT Time_Stamp
INTO PWC_L6_Report
FROM PWC_L6_Daily
ORDER BY Time_Stamp DESC
我真的很感激你的建议谢谢。
3条答案
按热度按时间s2j5cfk01#
如何判断数据是否按您想要的顺序排列?语句:
将数据 * 作为无序 * 结果集返回。强制排序的唯一方法是使用
order by
。在SQL Server中,您 * 不 * 按插入顺序获取数据。这是符合ANSI的行为,并且与几乎所有数据库的工作方式一致。如果希望结果按特定顺序排列,请使用order by
。order by
可以用于insert
,这是有充分理由的。如果这样做:然后一个 identity 列将以正确的顺序递增(这是一个很好的特性,但是可能会减慢插入速度)。在查询中使用
row_number()
可以获得类似的效果:现在,如果需要,您可以使用
order by id
代替time_stamp
。mrphzbgm2#
排序依据仅用于显示目的。当用于插入数据时,它不起作用。将表格视为集合。
ejk8hzay3#
我看到的不同之处在于,在第2步中,您在order by语句中使用的变量(Time_Stamp)是表中的一个现有列;而在第4步中,您使用的变量(Last_Produced)不是表中的一个现有列--您仍在创建该列的过程中。
在查询4中,如果您使用order by max(Time_Stamp),那么我认为应该可以工作。
另外,我注意到如果您在SAS环境中使用“proc sql and create table query”,那么在变量名创建过程中按顺序使用变量名是有效的。这可能与SAS/SQL处理/保存数据的方式有关。