我希望有聚合查询来计算两个日期之间的记录,我希望结果在别名列名称为startDay - 结束日,即假设我想在2015年1月1日到2015年1月5日之间记录计数,那么我希望在列头像“1 - 5”。
答案 0 :(得分:1)
在这种情况下,我想到你想根据作为查询参数发送的日期来改变列名,如果日期是从1日到5日,你会想要1-5如果日期是20日至25日,您需要20-25作为列名。要做到这一点,你需要动态SQl,这是一个很难写,甚至更糟糕的测试。它也可能是一场安全噩梦。如果你受到约束并决定做这个愚蠢的事情,那么这大致是如何做到的:
declare @startdate date= '2015/01/01'
, @enddate date='2015/01/05'
, @test varchar (10)
set @test = cast( day(@startdate) as varchar (2)) +'-' + cast( day(@enddate) as varchar (2))
declare @Sql varchar(max)
set @sql = 'select top 10 id, field1 - field2 as '
+''''+@test+'''' + ' from table1
where date_entered >' +cast(@startdate as varchar(10))+
' and date_entered <= ' + cast(@enddate as varchar(10))
EXECUTE sp_executesql @SQL
实际上你应该为执行sp_executesql语句设置参数值,但我作弊是因为你只会传递难以用于sql注入攻击的日期。无论如何,在您阅读并彻底理解以下链接之前,请不要考虑这样做:
动态SQL可能非常危险,应该避免使用,特别是当它只是需要使用它的化妆品时。不应该轻易使用它,也不应该理解你正在做的事情的总体含义。
答案 1 :(得分:-1)
好的,这里缺乏描述是我尝试找出你想要的东西的最佳尝试。如果我完全离开,我道歉。
基本上,如果您正在寻找自定义列名称,并且还希望列具有多个日期范围。例如:如果您希望一列具有1月1日到1月6日之间的值...则在1月7日到1月13日之间的另一列日期......依此类推。然后你需要看看类似于我在下面列出的子查询。
您可以编写子查询,仅选择您要查找的范围的数据,然后将其连接回您要拉的主表。
注意:如果你使用这种方法,你会在你的查询中弹出很多空值,这样你就可以根据需要过滤掉它们,但这对于你如何进行连接有很大不同子查询。
SELECT
ID
X.Jan1toJan6 AS [custom column name]
FROM
TABLE1
INNER JOIN
(SELECT DISTINCT
ID,
[UpdateDate] as Jan1toJan6
FROM [table1]
WHERE [UpdateDate] BETWEEN '2008-01-01' AND '2008-01-06') as X
ON X.ID = Table1.ID