我有一个名为calcu
id date name s1 s2 s3 s4 min_value
1 02/10/2017 dicky 7 4 8 9 4
2 02/10/2017 acton 12 15 17 19 15
3 02/10/2017 adney 28 13 19 10 13
This is my table in SQL Fiddle
我需要row wise total value
。我的意思是新列total
,它将是(s1 + s2 + s3 + s4),即(7 + 4 + 8 + 9)= 28 where id=1
,(12 + 15 + 17 + 19) = 63 where id=2
,(28 + 13 + 19 + 10)= 70 where id=3
。
结果如下:
id date name s1 s2 s3 s4 min_value Total
1 02/10/2017 dicky 7 4 8 9 4 28
2 02/10/2017 acton 12 15 17 19 15 63
3 02/10/2017 adney 28 13 19 10 13 70
结果总共161行和3行变为1行。
如何编写SQL查询?
答案 0 :(得分:1)
SUM()
函数是一个聚合函数。与其他聚合一样,仅将其用于计算多行的值。
您希望在一行中添加值,因此只需使用+
运算符(括号是可选的)。
至于找到行中的最小值,使用CASE WHEN
进行3次测试,比较S1,S2,S3和S4。
这应该有效:
select
c.id, c.date, c.name, c.s1, c.s2, c.s3, c.s4,
(c.s1 + c.s2 + c.s3 + c.s4) as total,
case
when c.s1 <= c.s2 and c.s1 <= c.s3 and c.s1 <= c.s4 then c.s1
when c.s2 <= c.s1 and c.s2 <= c.s3 and c.s2 <= c.s4 then c.s2
when c.s3 <= c.s2 and c.s3 <= c.s1 and c.s3 <= c.s4 then c.s3
when c.s4 <= c.s2 and c.s4 <= c.s3 and c.s4 <= c.s1 then c.s4
end as min_value
from calcu c
;
请参阅SQLFiddle
答案 1 :(得分:0)
select c.id,
c.date, c.name, c.s1, c.s2, c.s3, c.s4,
least(s1,s2,s3,s4) Minvalue,
(s1+s2+s3+s4) Total
from calcu c
我尝试简化查询。所以你正在寻找s1,s2,s3和s4中的最小值。你可以用最少的功能来实现。而且你需要总共所有四个'列'。只需添加它们
答案 2 :(得分:0)
SELECT *,s1 + s2 + s3 + s4为Total FROM FOR /D %%G in ( "C:\*" ) DO (
IF /I %%G NEQ C:\Windows (
echo %%G | FINDSTR /I /R ".*program.files.*" > NUL
IF ERRORLEVEL 1 echo do something with %%G
)
)