SQL作为别名插入表变量

时间:2017-04-27 20:42:19

标签: sql sql-server sql-insert

SQL Alert新手!

我已经声明了一个表变量并执行了标准

Insert into @table
(
    columns
)
select (acquired data result)

我计划按月进行年度数据比较(例如比较本年和去年四月的数据)。由于我不想创建一个具有相同结构的单独表格,除非我绝对不得不这样做,这是我的问题:

是否可以将不同的数据集插入到同一临时表中作为别名来区分两者?

喜欢,例如

(Insert into @table
(
    columns
)
select (acquired data 1 result)) as alias1

(Insert into @table
(
    columns
)
select (acquired data 2 result)) as alias2

2 个答案:

答案 0 :(得分:1)

为了您将月份数据与上一年同月的数据进行比较,您可以使用common table expressions代替表格变量。

e.g。

;with PriorYear as (
  select ...
  from ...
  where ...
)
, CurrentYear as (
  select ...
  from ...
  where ...
)
select ...
from PriorYear 
  inner join CurrentYear 
    on ...

可能有许多比这更好的方法,它只取决于你正在做什么样的比较和操作。

如果表变量中有多行,那么最好使用实际的临时表而不是表变量。

参考:

答案 1 :(得分:1)

如果您想将一个月的数据与过去一年的所有月份进行比较,您只需要某种时间戳字段,您可以按年份分组并按月过滤。您可以使用以下内容来适合您的示例。

SELECT COUNT(*) AS [SomeAggregateFunction]
    , DATEPART(YEAR, [myTimestamp]) AS [Year]
FROM [myTable]
WHERE DATEPART(MM, [myTimestamp]) = 12
GROUP BY DATEPART(YEAR, [myTimestamp])

这只会显示" 12月"并按年度对信息进行分组。您可以使用任何类型的聚合函数来获取有用的信息,例如" SUM()"或" MAX()"而不是我的" COUNT(*)"。这有用的一个很好的例子是确定每年在某个月或某些地方下达的订单数量。或者,如果您想获得每年12月份销售额的总和。只需根据需要进行编辑即可。如果您需要帮助,请随时发表评论。