运行 查询列中包含采购和销售的总计
Running total with purchases and sales in query column
我有一个 table 如下所示:
如何使用 Transact-SQL(按日期排序)获得如下所示的列?
我正在使用 SQL Server 2016。
你需要的东西叫做 aggregate windowing function,具体来说 SUM ... OVER
。
问题是这样的 'running total' 只有在您可以确定地指定行的顺序时才有意义。示例数据不包含可用于提供此必需排序的属性。表格本身没有明确的顺序。
如果您有输入日期列之类的内容,则可以使用如下解决方案:
DECLARE @T table
(
EntryDate datetime2(0) NOT NULL,
Purchase money NULL,
Sale money NULL
);
INSERT @T
(EntryDate, Purchase, Sale)
VALUES
('20180801 13:00:00', 00, NULL),
('20180801 14:00:00', NULL, 0),
('20180801 15:00:00', NULL, 0),
('20180801 16:00:00', 00, NULL);
SELECT
T.Purchase,
T.Sale,
Remaining =
SUM(ISNULL(T.Purchase, [=10=]) - ISNULL(T.Sale, 0)) OVER (
ORDER BY T.EntryDate
ROWS UNBOUNDED PRECEDING)
FROM @T AS T;
演示:db<>fiddle
在 window 框架中使用 ROWS UNBOUNDED PRECEDING
是 shorthand 用于 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
。 ROWS
is different w.r.t duplicates (and generally better-performing) 的行为优于默认的 RANGE
。有强有力的论据表明 ROWS
应该是默认值,但那不是我们得到的。
有关详细信息,请参阅有关该主题的 How to Use Microsoft SQL Server 2012's Window Functions by Itzik Ben-Gan, and his excellent book。
我有一个 table 如下所示:
如何使用 Transact-SQL(按日期排序)获得如下所示的列?
我正在使用 SQL Server 2016。
你需要的东西叫做 aggregate windowing function,具体来说 SUM ... OVER
。
问题是这样的 'running total' 只有在您可以确定地指定行的顺序时才有意义。示例数据不包含可用于提供此必需排序的属性。表格本身没有明确的顺序。
如果您有输入日期列之类的内容,则可以使用如下解决方案:
DECLARE @T table
(
EntryDate datetime2(0) NOT NULL,
Purchase money NULL,
Sale money NULL
);
INSERT @T
(EntryDate, Purchase, Sale)
VALUES
('20180801 13:00:00', 00, NULL),
('20180801 14:00:00', NULL, 0),
('20180801 15:00:00', NULL, 0),
('20180801 16:00:00', 00, NULL);
SELECT
T.Purchase,
T.Sale,
Remaining =
SUM(ISNULL(T.Purchase, [=10=]) - ISNULL(T.Sale, 0)) OVER (
ORDER BY T.EntryDate
ROWS UNBOUNDED PRECEDING)
FROM @T AS T;
演示:db<>fiddle
在 window 框架中使用 ROWS UNBOUNDED PRECEDING
是 shorthand 用于 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
。 ROWS
is different w.r.t duplicates (and generally better-performing) 的行为优于默认的 RANGE
。有强有力的论据表明 ROWS
应该是默认值,但那不是我们得到的。
有关详细信息,请参阅有关该主题的 How to Use Microsoft SQL Server 2012's Window Functions by Itzik Ben-Gan, and his excellent book。