Access数据库(桌面数据库系统)

使用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 语句实现复杂的数据处理任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值