2016-07-25 64 views
0

我的目標是加載具有總和和其他平均計算在底部的銷售數據,每月每日表格顯示,排序號在SQL Server

我有一個數據結果集有一個列被命名爲'日',其對應於該月的日子,具有int的自動數據類型。

select datepart(day, a.date) as 'Day' 

在我的第二個結果集,在底部的總和的負載,它發生的話「求和」對齊日的專欄,我使用UNION ALL合併的結果集在一起,預期的結果集是值得這個喜歡

day sales 
1  10 
2  20 
3  30 
4  10 
5  20 
6  30 
. 
. 
. 
31  10 
Sum 130 

我所做的是有一天值轉換,最初在INT爲VARCHAR數據類型。這是成功地連接列和它沒有,新的衝突是多少的排序

select * from #SalesDetailed 
UNION ALL 
select * from #SalesSum 
order by location, day 
+0

作爲建議的錯誤消息,您可以在同一列上具有整數和字符串值。 SQL Server將嘗試將一個轉換爲另一個。在這種情況下,字符串爲int。它不能這麼做,並會失敗。對於這樣的要求,通常是在您的報告或前端應用程序中完成的。不在sql服務器 – Squirrel

+0

所以沒有辦法達到我想要的結果? – rickyProgrammer

+0

不完全。一些尷尬的工作。您必須將日期轉換爲字符串。正如你已經發現返回刺你的應用程序可能會搞砸你的應用程序 – Squirrel

回答

1

假設您的工會查詢返回正確的結果,只是打亂了順序,你可以在命令使用caseisnumeric by子句來操縱您的排序:

SELECT * 
FROM 
(
    SELECT * 
    FROM #SalesDetailed 
    UNION ALL 
    SELECT * 
    FROM #SalesSum 
) u 
ORDER BY location, 
     ISNUMERIC(day) DESC, 
     CASE WHEN ISNUMERIC(day) = 1 THEN cast(day as int) end 

isnumeric將返回1時,天是一個數字,當它不是時是0。

+0

它工作。謝謝 – rickyProgrammer

1

試試這個

select Day, Sum(Col) as Sales 
from #SalesDetailed 
Group by Day With Rollup 

編輯(工作示例)

select 
CASE WHEN Day IS NULL THEN 'SUM' ELSE STR(Day) END as Days, 
Sum(Sales) from 
( 

Select 1 as Day , 10 as Sales UNION ALL 
Select 2 as Day , 20 as Sales 

) A 
Group by Day With Rollup 

編輯2:

select CASE WHEN Day IS NULL THEN 'SUM' ELSE STR(Day) END as Days, 
     Sum(Sales) as Sales 
from #SalesDetailed 
Group by Day With Rollup 
+0

謝謝!我會嘗試這個 – rickyProgrammer

+0

不工作先生。 – rickyProgrammer

+0

@rickyProgrammer它肯定會工作什麼是你試過的查詢?也許我應該發佈一個帶有實際表名和列的查詢......查看編輯 – objectNotFound