【发布时间】:2015-03-23 17:50:59
【问题描述】:
我有以下查询,它为我提供了每个位置的项目和项目详细信息、价值、费率和数量。
我正在尝试根据开始和结束日期获取年收入。例如,如果选择的日期是 2013-2015。最终结果将创建 3 列,一列用于 2013 年收入,一列用于 2014 年收入,一列用于 2015 年收入。
我是一个新手,在编写查询方面仍然不是专家,但这是我目前所拥有的:
SELECT
department,
item,
itemdesc,
qty1,
qty2,
rate_1,
rate_2,
SUM(mm.days*mm.rate*mm.qty)
FROM
items it
LEFT JOIN
(SELECT
i.days, i.rate, i.days, ii.todate, ii.itemid
FROM
invoiceofitems ii
JOIN
invoices i on i.id = ii.id
WHERE
ii.todate BETWEEN @StartDate and @EndDate) mm ON mm.itemid = it.itemid
GROUP BY
department,
item,
itemdesc,
qty1, qty2,
rate_1, rate_2
ORDER BY
item
但是,这并没有为我提供我需要的逐年汇总发票收入。
我知道这可以通过迭代来实现。但是我将如何做到这一点,我将从哪里开始呢?
我是否需要知道每年的开始日期和结束日期并对其进行迭代,然后在年份中添加一个计数器,直到 year= EndDate?
我非常困惑。帮助将不胜感激。
【问题讨论】:
-
为什么要为每一年写一个专栏?为什么不是一行?
-
这个想法是根据开始和结束日期了解项目每年产生的收入。所以我认为专栏最有意义?我的假设是错误的吗?
-
我认为把它分成几行是最有意义的。 SQL 列的动态性远低于行。您必须使用动态 SQL 或生成的 SQL 来获取不同数量的列,而使用一行您可以将它们分组并获得您想要的内容
-
好的,那我怎么通过行呢?
-
只是按年分组-为什么要按部门和项目等分组?
标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2