我对SQL Server还是很陌生,但是我仍然可以完成所需的大部分工作。但是,有一件事我只是无法理解,而且它可以处理日期。我有一个这样的数据库用于记录销售:
**Sales**
[index] int
timestamp datetime
username varchar(10)
type int
amount int
value int
location int
receipt text
**Demo**
index timestamp username type amount value location receipt
1 2013-08-14 11:29:29.367 andrer 1 1 10 2 *long text*
我必须查询我要执行的操作...第一个是最近7天的表格,向我显示每天的客户数量。我的主要问题是能够正确排序输出,同时仍以格式显示输出15.02.2014
。这就是我最终得到的。虽然可以正常工作..有没有更简单的编写方法?
SELECT CONVERT(varchar, DATEADD(dd, 0, DATEDIFF(dd, 0, [timestamp])), 104) as [timestamp],
COUNT([username]) as a
FROM [sales]
WHERE [timestamp] >= DATEADD(day,-7, GETDATE())
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, [timestamp]))
ORDER BY [timestamp]
我的另一个问题是要制作一个表,该表包含当月名称以及当前和去年的客户数量。这是我最近几周一直在苦苦挣扎的事情,无法解决。
使用与上面相同的表,我试图像这样获取和输出,其中第一列是月份的名称,第二列是当年的客户数量,其后是一列客户数量前一年。
January | 1345 | 299 |
February | 231 | 342 |
...
可悲的是,对于当前年份/上一年的查询,我还没有可用的代码,希望你们中的某人知道一种简单的编写方法。:)
SELECT DATENAME(MONTH,[timestamp]) [Month]
,COUNT(DISTINCT CASE WHEN YEAR([timestamp]) = YEAR(GETDATE())
THEN username ELSE NULL END) CurrentYear
,COUNT(DISTINCT CASE WHEN YEAR([timestamp]) = YEAR(GETDATE())-1
THEN username ELSE NULL END) LastYear
FROM Sales
GROUP BY DATENAME(MONTH,[timestamp]), MONTH([timestamp])
ORDER BY MONTH([timestamp])
这将以以下格式返回数据
╔═══════════╦═════════════╦══════════╗
║ Month ║ CurrentYear ║ LastYear ║
╠═══════════╬═════════════╬══════════╣
║ February ║ 1000 ║ 0 ║
║ March ║ 1235 ║ 202 ║
║ September ║ 1750 ║ 787 ║
╚═══════════╩═════════════╩══════════╝
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句