首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

老了, 求教个SQL 话语写法, 请大家帮忙

2013-05-02 
老了, 求教个SQL 语句写法, 请大家帮忙有如下表格, 有个恒定值30F0F1F2F3----------------------A1202216A

老了, 求教个SQL 语句写法, 请大家帮忙
有如下表格, 有个恒定值30
F0    F1    F2    F3
----------------------
A1    20    22    16
A2    8      6      4
A3    18    2     -10

求个简单点的语句算出如上红色那一行A3的数据,

计算原则是比如A3第一个数18 = 30 - 20 + 8 
然后第二个数 2 = 18 - 22 + 6, 里面的18就是前面一列算出来的18
依此类推...
[解决办法]

if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (F0 nvarchar(4),F1 int,F2 int,F3 int)
insert into [TB]
select 'A1',20,22,16 union all
select 'A2',8,6,4



;WITH TH
AS(
SELECT num,A1
FROM (select F0,CASE WHEN F0='A2' THEN -F1 ELSE F1 END AS F1,
CASE WHEN F0='A2' THEN -F2 ELSE F2 END AS F2,
CASE WHEN F0='A2' THEN -F3 ELSE F3 END AS F3
from [TB])B
UNPIVOT(A1 FOR num IN(F1,F2,F3))AS u),

TF
AS(
SELECT num,SUM(A1) AS A1
FROM TH 
GROUP BY num),

FF
AS(
SELECT B.num,30 -SUM(A.A1) AS 'A3'
FROM TF A
INNER JOIN TF B ON A.num <=B.num
GROUP by b.num)

SELECT F0,F1,F2,F3 FROM dbo.TB
UNION all
SELECT 'A3' AS F0,
F1,F2,F3
FROM FF
PIVOT(MAX(A3)
FOR num IN (F1,F2,F3))U


/*
F0F1F2F3
A1202216
A2864
A3182-10*/

[解决办法]
很菜啊,我看都看不懂,呵呵
[解决办法]

CREATE TABLE t1
(
f0 VARCHAR(10),
f1 INT,
f2 INT,
f3 INT
)
INSERT INTO t1
SELECT 'A1',20,22,16 UNION ALL
SELECT 'A2',8,6,4
SELECT * FROM t1

;WITH AAA AS
(
SELECTROW_NUMBER() OVER(ORDER BY f0 DESC) AS Rowindex,
*
FROMt1
)
,BBB AS
(
SELECTA.f0,
A.f1 AS f11,
A.f2 AS f21,
A.f3 AS f31,
B.f1 AS f12,
B.f2 AS f22,
B.f3 AS f32
FROMAAA AS A INNER JOIN
AAA AS B ON A.Rowindex=B.Rowindex-1
ANDA.Rowindex=1
)
--SELECT * FROM BBB
INSERT INTO t1
(
f0,
f1,
f2,
f3
)
SELECTLEFT(f0,1)+LTRIM(CAST(RIGHT(f0,LEN(f0)-1) AS INT)+1) AS f0,
30-f12+f11 AS [f1],
30-f12+f11-f22+f21 AS [f2],


30-f12+f11-f22+f21-f32+f31 AS [f3]
FROMBBB

---------------------------------------------------
f0f1f2f3
A1202216
A2864
A3182-10

热点排行