从 select 语句在 SQL 服务器中创建视图
Creating a view in SQL Server from select statement
我有 select 报表,其中 returns 每天的收入或结果以两种货币表示:
SELECT SUM(CASE
WHEN C.Name LIKE 'B%' AND T.Income = 0 THEN 0-T.Amount
WHEN C.Name LIKE 'B%' AND T.Income = 1 THEN T.Amount
ELSE 0
END) AS AmountBYR
,SUM(CASE
WHEN C.Name LIKE 'U%' AND T.Income = 0 THEN 0-T.Amount
WHEN C.Name LIKE 'U%' AND T.Income = 1 THEN T.Amount
ELSE 0
END) AS AmountUSD
,CR.Date
FROM [FinanceLabkovich].[dbo].[Transactions] T
JOIN [FinanceLabkovich].[dbo].[Bills] B ON B.BillID=T.BillID
JOIN [FinanceLabkovich].[dbo].[Currencies] C ON C.CurrencyID=B.CurrencyID
RIGHT JOIN [FinanceLabkovich].[dbo].[CurrencyRates] CR ON CR.Date=T.Date
GROUP BY CR.Date
ORDER BY CR.Date
我需要创建一个视图来显示这个人每天总共有多少钱
在 SQL Server 2012 及更高版本中,您可以使用 运行 总和来计算当前余额:
sum(column_name) over (order by date) as running_sum
要在一天结束时仅查找 运行 总和,您可以使用子查询:
select *
from (
select customer_id
, sum(amount) over (
partition by customer_id
order by [date]) as balance
, row_number() over (
partition by customer_id, cast([date] as date)
order by [date] desc) as rn
from Transactions
) as SubQueryAlias
where rn = 1 -- Only latest row per customer per day
我有 select 报表,其中 returns 每天的收入或结果以两种货币表示:
SELECT SUM(CASE
WHEN C.Name LIKE 'B%' AND T.Income = 0 THEN 0-T.Amount
WHEN C.Name LIKE 'B%' AND T.Income = 1 THEN T.Amount
ELSE 0
END) AS AmountBYR
,SUM(CASE
WHEN C.Name LIKE 'U%' AND T.Income = 0 THEN 0-T.Amount
WHEN C.Name LIKE 'U%' AND T.Income = 1 THEN T.Amount
ELSE 0
END) AS AmountUSD
,CR.Date
FROM [FinanceLabkovich].[dbo].[Transactions] T
JOIN [FinanceLabkovich].[dbo].[Bills] B ON B.BillID=T.BillID
JOIN [FinanceLabkovich].[dbo].[Currencies] C ON C.CurrencyID=B.CurrencyID
RIGHT JOIN [FinanceLabkovich].[dbo].[CurrencyRates] CR ON CR.Date=T.Date
GROUP BY CR.Date
ORDER BY CR.Date
我需要创建一个视图来显示这个人每天总共有多少钱
在 SQL Server 2012 及更高版本中,您可以使用 运行 总和来计算当前余额:
sum(column_name) over (order by date) as running_sum
要在一天结束时仅查找 运行 总和,您可以使用子查询:
select *
from (
select customer_id
, sum(amount) over (
partition by customer_id
order by [date]) as balance
, row_number() over (
partition by customer_id, cast([date] as date)
order by [date] desc) as rn
from Transactions
) as SubQueryAlias
where rn = 1 -- Only latest row per customer per day