2015-07-13 28 views
1

在#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

回答

0
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

1

使您的臨時表具有一個附加整數,自動遞增(identity)主鍵列。現在,當您按照特定順序插入該表格時,此訂單將保留。

編輯

由於訂單隻能計算臨時表中的內容已經被組裝後,引入額外的整數列(id)的 - 標識列 - 可能的幫助。這應該通過合適的update語句設置爲該月的數字等值,然後可用於對臨時表的內容進行排序。請看這裏的一個小例子:http://data.stackexchange.com/stackoverflow/query/336013/default-order-of-temp-table?opt.textResults=true

但是在任何情況下,必須始終使用order by id子句。

+0

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

+0

嗯,是的,這是你必須支付的價格。據我所知,重置表的「隱式順序」是不可能的。但是你可以*將第一個臨時表的內容插入第二個臨時表(具有'identity'列)中的「正確順序」,然後將其保存。 – cars10m

3

試試這個:

只是做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