我是sql server
的初学者,有两张桌子,表GetOnlineBills
有这种形状:
--Telno-- --Cycle-- --Bill--
nchar(20) nchar(20) float
表25Percantage
:
--Telno-- --Cycle-- --Bill--
nchar(20) nchar(20) float
想要使用此流程在tsql
表中为分析Telno
编写查询或GetOnlineBill
:
1-fetch Telno ang get it bill value in Cycle 951 and Cycle 952
2-If Bill(952)>Bill(951) then write into 25 percantage this data (Bill(952)-Bill(951))
进入GetOnlineBill的表每个周期写入订阅账单信息,例如有两个订阅(在真正的世界有100万订阅)与此计划:
进入GetOnlineBills
一个mounth数据是这样的:
--Telno-- --Cycle-- --Bill--
12345 951 300
54321 951 500
和其他月份数据是:
--Telno-- --Cycle-- --Bill--
12345 952 400
54321 952 600
两个mounth的最终GetOnlineBill
是:
--Telno-- --Cycle-- --Bill--
12345 951 300
54321 951 500
12345 952 400
54321 952 600
现在,我想要分析GetOnlineBill
,想要写入查询或tsql
创建最终25Percantage
表格给我看这个:
--Telno-- --Cycle-- --Bill--
12345 951-952 100 ------>Bill(952)-Bill(951) Minus
54321 951-952 300
----------------------------------------
Explain:
Bill:Field Name on GetOnlineBill table
952:Cycle
951:Cycle
我如何为此目的编写查询或tsql
?请写信给我。谢谢所有。
答案 0 :(得分:0)
尝试如下:
DECLARE @Tbl TABLE (TelNo NCHAR(20), Cycle NCHAR(20), Bill FLOAT)
INSERT INTO @Tbl
VALUES
('12345', '951', 300),
('12345', '952', 400),
('54321', '951', 500),
('54321', '952', 600)
;WITH CTE
AS
(
SELECT *, DENSE_RANK() OVER (ORDER BY Cycle) MonthId
FROM @Tbl
)
SELECT
CurrentMonth.TelNo,
CurrentMonth.Cycle + '-' + NextMonth.Cycle Cycle,
CASE
WHEN NextMonth.Bill > CurrentMonth.Bill THEN NextMonth.Bill - CurrentMonth.Bill
ELSE CurrentMonth.Bill END Bill -- Change as you want
FROM
CTE CurrentMonth LEFT JOIN
CTE NextMonth ON CurrentMonth.TelNo = NextMonth.TelNo AND (NextMonth.MonthId - 1) = CurrentMonth.MonthId
WHERE
NextMonth.MonthId IS NOT NULL
结果:
TelNo Cycle Bill
-------------------- ------------------------ ---------
54321 951-952 100
12345 951-952 100
答案 1 :(得分:0)
内部联接可以帮助您:
SELECT y.Telno,
t.Cycle+'-'+y.Cycle Cycle,
y.Bill - t.Bill Price
FROM YourTable y
INNER JOIN YourTable t
ON y.Telno = t.TelNo AND CAST(y.Cycle as int)-1 = CAST(t.Cycle as int)
输出:
Telno Cycle Price
12345 951-952 100
54321 951-952 100
如果Cycle
列无法转换为integer
,那么您需要一些其他字段才能正确排序表并加入该字段(或外部应用)