使用IIF(SQL中使用CASE WHEN)
SELECT 上传日期,
Sum(IIf([产品处置]="Hold", 1, 0)) AS Hold,
Sum(IIf([产品处置]="已入库", 1, 0)) AS 已入库,
Sum(IIf([产品处置] Is Null, 1, 0)) AS 未判定,
count(*) AS 总计
FROM 晶圆中转虚拟库
GROUP BY 上传日期
ORDER BY 上传日期;
select 型号,
Sum(IIf([良率判定]<>"合档错误", 1, 0)) AS 合档片数,
Sum(IIf([良率判定]="低良", 1, 0)) AS CP低良,
Sum(IIf([良率判定]="合档错误", 1, 0)) AS 合档错误
from
(
SELECT mid(Product,3,3) as 型号,良率判定
from CP_Data
where 上传日期= Date() -1
UNION ALL
SELECT mid(Product,3,3) as 型号,"合档错误" as 良率判定
FROM 合档错误
where 合档日期= Date()-1
) as tableA
group by 型号
没优化的SQL
SELECT *
FROM (
SELECT mid(Product,3,3) as 型号,''as 合档片数,count(*) as CP低良,'' as 合档错误
FROM CP_Data
where 上传日期= Date() -1 and 良率判定="低良"
group by mid(Product,3,3)
UNION ALL SELECT mid(Product,3,3) as 型号,count(*) as 合档片数,'',''
FROM CP_Data
where 上传日期= Date() -1
group by mid(Product,3,3)
UNION ALL SELECT mid(Product,3,3) as 型号,'','',count(*) as 合档错误
FROM 合档错误
where 合档日期= Date() -1
group by mid(Product,3,3)) AS tableA
ORDER BY 型号;
需合并数据
' 遍历原始表并合并数据
For Each row As DataRow In originalTable.Rows
'表内容
Dim model As String = row("型号").ToString()
Dim chipCount As Integer? = Val(row("合档片数").ToString())
Dim isCPLow As Integer? = Val(row("CP低良"))
Dim errorCount As Integer? = Val(row("合档错误"))
Dim mergedRow As DataRow = mergedTable.Rows.Cast(Of DataRow)().FirstOrDefault(Function(r) r("型号").ToString() = model)
If mergedRow Is Nothing Then
' 如果型号不存在于合并表中,则添加新行
mergedRow = mergedTable.NewRow()
mergedRow("型号") = model
mergedRow("合档片数") = If(chipCount.HasValue, chipCount.Value, 0)
mergedRow("CP低良") = If(isCPLow.HasValue, isCPLow.Value, 0)
mergedRow("合档错误") = If(errorCount.HasValue, errorCount.Value, 0)
mergedTable.Rows.Add(mergedRow)
Else
' 如果型号已存在于合并表中,则更新相应列
mergedRow("合档片数") += If(chipCount.HasValue, chipCount.Value, 0)
mergedRow("CP低良") += If(isCPLow.HasValue, isCPLow.Value, 0)
mergedRow("合档错误") += If(errorCount.HasValue, errorCount.Value, 0)
End If
Next
Access 数据库支持的 SQL 函数非常丰富,涵盖了多个方面,包括日期和时间处理、文本操作、数学计算、聚合统计以及逻辑判断等。以下是一些常用的 Access SQL 函数分类及示例:
1. 日期和时间函数
- Date:返回当前日期。
- Now:返回当前日期和时间。
- Time:返回当前时间。
- DateAdd:在指定的日期上增加或减少指定的时间间隔。例如,
DateAdd("d", 10, "2023-10-01")
将返回 "2023-10-11"。 - DateDiff:计算两个日期之间的差值。例如,
DateDiff("d", "2023-10-01", "2023-10-11")
将返回 10。 - Year:从日期中提取年份。
- Month:从日期中提取月份。
- Day:从日期中提取日。
2. 文本函数
- Len:返回字符串的长度。例如,
Len("Hello")
将返回 5。 - Left:返回字符串的左边部分。例如,
Left("Hello", 2)
将返回 "He"。 - Right:返回字符串的右边部分。例如,
Right("Hello", 2)
将返回 "lo"。 - Mid:从字符串的指定位置开始,返回特定长度的子字符串。例如,
Mid("Hello", 2, 3)
将返回 "ell"。 - Replace:在字符串中替换指定的子字符串。例如,
Replace("Hello World", "World", "Access")
将返回 "Hello Access"。 - Upper:将字符串转换为大写。
- Lower:将字符串转换为小写。
3. 数学函数
- Abs:返回数字的绝对值。例如,
Abs(-5)
将返回 5。 - Round:将数字四舍五入到指定的小数位数。例如,
Round(3.14159, 2)
将返回 3.14。 - Int:返回数字的整数部分。例如,
Int(3.7)
将返回 3。 - Sqr:返回数字的平方根。例如,
Sqr(16)
将返回 4。 - Log:返回数字的自然对数。例如,
Log(10)
将返回 2.302585。 - Exp:返回 e 的指定次幂的值。例如,
Exp(1)
将返回 2.718282。 - Rnd:返回 0 到 1 之间的随机数。
4. 聚合函数
- Avg:计算某个字段的平均值。
- Count:统计记录条数。
- Max:返回某字段中的最大值。
- Min:返回某字段中的最小值。
- Sum:计算某个字段的总和。
5. 逻辑函数
- IIF:根据条件返回不同的值。例如,
IIF([Sales] > 1000, "High", "Low")
将根据 Sales 字段的值返回 "High" 或 "Low"。 - And:逻辑与运算。
- Or:逻辑或运算。
- Not:逻辑非运算。
6. 转换函数
- CInt:将值转换为整数。
- CDate:将值转换为日期。
- CSng:将值转换为单精度浮点数。
- CDbl:将值转换为双精度浮点数。
- CStr:将值转换为字符串。
7. 系统函数
- Current_User:返回当前用户的名称。
- Environment:返回系统环境变量的值。
- DB_Name:返回当前数据库的名称。
- Version:返回当前数据库软件的版本信息。
这些函数在 Access SQL 查询中非常有用,可以帮助用户轻松地进行数据操作和分析。用户可以根据具体需求选择合适的函数,并结合 SQL 语句实现复杂的数据处理任务。