如何在SQL的临时表设置为了

问题描述:

在#temp表,我让我的价值观如何在SQL的临时表设置为了

Month   Sales 
JUN 2015 600.00 
JAN 2015 5000.00 
MAR 2015 3500.00 
MAY 2015 1000.00 
FEB 2015 1500.00 
APR 2015 1400.00 

如何通过每月更新#TEMP桌子以维持秩序,并通过修改变化改变表,我用order by DATEPART(mm,CAST(Substring(Month, 1, CharIndex(' ', Month) - 1)+ ' 1900' AS DATETIME)) asc但#TEMP选择发射时的变化没有反映

预期输出:

Month  Sales 
JAN 2015 5000.00 
FEB 2015 1500.00 
MAR 2015 3500.00 
APR 2015 1400.00 
MAY 2015 1000.00 
JUN 2015 600.00 

因此,下一次如果我做select * from #temp,我应该得到预期的输出

+3

不使用'ORDER BY'没有用于显示一个排序结果任何保证)。 –

+0

如何在临时表中插入值? –

+0

使用'select * into #temp from(select * from userid = @ userid)'我也尝试过使用这里的命令,但是我没有得到预期的输出 – Steph

declare @t table (Month varchar(10),sales decimal(18,2)) 

insert into @t (Month,sales)values ('JUN 2015',600.00), 
('JAN 2015', 5000.00), 
('MAR 2015',3500.00), 
('MAY 2015',1000.00) 

select MONTH,sales from @t order by DATEPART(MM,month) 
+0

它是同样的事情,我正在做,你选择,但正如我所说,它不是我最后的选择,所以我需要这张表是为进一步过程的预期,我也试图得到这个输出在另一个临时表,但它没有工作 – Steph

使您的临时表具有一个附加整数,自动递增(identity)主键列。现在,当您按照特定顺序插入该表格时,此订单将保留。

编辑

由于订单只能计算临时表中的内容已经被组装后,引入额外的整数列(id)的 - 标识列 - 可能的帮助。这应该通过合适的update语句设置为该月的数字等值,然后可用于对临时表的内容进行排序。请看这里的一个小例子:http://data.stackexchange.com/*/query/336013/default-order-of-temp-table?opt.textResults=true

但是在任何情况下,必须始终使用order by id子句。

+0

我需要添加身份,但行后按月排序 – Steph

+0

嗯,是的,这是你必须支付的价格。据我所知,重置表的“隐式顺序”是不可能的。但是你可以*将第一个临时表的内容插入第二个临时表(具有'identity'列)中的“正确顺序”,然后将其保存。 – cars10m

试试这个:

只是做CAST(MonthVal AS DATE)

DECLARE @Table TABLE 
(MonthVal VARCHAR(10), Sales DECIMAL(8,2)) 

INSERT INTO @Table 
VALUES 
('JUN 2015', 600.00), 
('JAN 2015', 5000.00), 
('MAR 2015', 3500.00), 
('MAY 2015', 1000.00), 
('FEB 2015', 1500.00), 
('APR 2015', 1400.00) 

SELECT 
    * 
FROM 
    @Table 
ORDER BY 
    CAST(MonthVal AS DATE) 
+0

不错和短。请记住:在SQL Server 2k8之前不起作用 – CeOnSql