*此问题之前已在stackoverflow中提出
。How to use if then statement on sql?
我已修改并在此再次询问*
1)“SELECT officer, null, sum(mkt), Sum(Non), sum(ICP), (sum(mkt)+Sum(Non)+sum(ICP)) as total From [DB$] group by officer
”< =他们没事。他们应该由官员分组,因为每个官员都有很多记录
2)对于field-mkt,它不一定由每个记录中的值组成。当mkt由值组成时,例如30,这意味着该官员进行现场工作。因此,我应该计算他的场时间 - 总计。
officer mkt Totalmin
S29 30 50
S29 60
S29 70 80
S29 80
S55 30 80
S55 60
S55 70 80
S55 80
因此,结果应为:
officer sum(totalmin)
s29 130
s55 160
你可以想象一下。如果Mkt字段由数字组成,则总min将加起来并成为最小要求。
在图片中,最小要求的输出应该是45+40=85
按人员分组(staffid-186)
如何编写这个sql?
而且,问题是我必须在同一个sql中将这两种情况结合起来。我怎么样?
答案 0 :(得分:1)
我对你的要求不是很清楚,但看起来你需要这样的东西,
SELECT officer ,null,sum(mkt) ,Sum(Non),sum(ICP),(sum(mkt)+Sum(Non)+sum(ICP) ) as total,
SUM(IIF( isnumeric(mkt) = true AND Survey = 'CPI' AND Activity = 'FI', Totalmin, 0 )) AS TotalMin
From [DB$]
group by officer
答案 1 :(得分:1)
您可以在select中使用子查询来执行此类任务:
Sub SQL()
Dim cn As Object: Set cn = CreateObject("ADODB.Connection")
Dim rs As Object: Set rs = CreateObject("ADODB.Recordset")
Dim tbl1$, QT, strFile$, strCon$, strSQL$
strFile = ThisWorkbook.FullName 'if not active file then specify path!!!
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
tbl1 = "[Sheet1$" & Sheets("Sheet1").UsedRange.Address(0, 0) & "]" 'replace sheet1 with required sheet name
strSQL = "SELECT o.officer ," & _
" NULL ," & _
" SUM(o.mkt) ," & _
" SUM(o.Non) ," & _
" SUM(o.ICP) ," & _
" ( SELECT SUM(i.Totalmin) FROM " & tbl1 & " AS i " & _
" WHERE i.Mkt > 0 AND i.officer = o.officer) AS TotalMin " & _
" FROM " & tbl1 & " AS o " & _
" GROUP BY o.officer"
rs.Open strSQL, cn
Workbooks.Add
Set QT = ActiveSheet.QueryTables.Add(rs, ActiveSheet.[A1]): QT.Refresh: QT.Delete
rs.Close
cn.Close
End Sub
我已经测试了这种方法,所以它也适用于你:
来源:
输出: