用于创建交叉表查询?(交叉表查询:这种查询用于对记录计算总计、平均值、计数或其他类型总计,然后按照两类信息对结果进行分组:一组信息分布在数据表的左侧,另一组分布在数据表的顶端。)。
TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN (value1[, value2[, ...]])]
TRANSFORM 语句包含以下部分:
部分
|
说明
|
aggfunction
|
对所选数据进行操作的 SQL 聚合函数。
|
selectstatement
|
SELECT 语句。
|
pivotfield
|
要用来在查询的结果集中创建列标题的字段或表达式?(表达式:算术或逻辑运算符、常数、函数和字段名称、控件和属性的任意组合,计算结果为单个值。表达式可执行计算、操作字符或测试数据。)。
|
value1, value2
|
用于创建列标题的固定值。
|
使用交叉表查询汇总数据时,从指定的字段或表达式中选择值作为列标题,以便可以用更紧凑的格式查看数据(而不是使用选择查询?(选择查询:就表中存储的数据提出问题,然后在不更改数据的情况下以数据表的形式返回一个结果集。))。
TRANSFORM 是可选的,但如果包括此语句,则是 SQL 字符串?(SQL 字符串/语句:用于定义 SQL 命令(如 SELECT、UPDATE 或 DELETE)的表达式,可以包含子句(如 WHERE 和 ORDER BY)。SQL 字符串/语句通常用在查询和聚合函数中。)中的第一个语句。它在指定用作行标题的字段的 SELECT 语句以及指定行分组的 GROUP BY 子句之前。您可以选择包括其他子句,例如指定附加选择或排序条件的 WHERE 子句。您还可以在交叉表查询中使用子查询?(子查询:在另一个选择查询或操作查询内的 SQL SELECT 语句。)作为谓词(尤其是 WHERE 子句中的谓词)。
pivotfield 中返回的值用作查询结果集中的列标题。例如,在交叉表查询中对月销售额的销售数字进行透视时,会创建 12 个列。可以将 pivotfield 限制为使用可选的 IN 子句中所列的固定值(value1, value2)来创建标题。您还可以包括数据不存在的固定值来创建附加列。
一表aTable,字段如下:
aVer,aCode,Price
12 F01 10
12 F02 3
.....
共有记录从F01顺序到F80,aVer都是一样的'12',我用交叉查询将纵向转成一行横向
Transform sum(price) select aVer from aTable group by aVer Pivot aCode
可以得到如下一行记录:
aVer F01 F02 F03.....F80
Transform sum(price) select aVer from aTable group by aVer Pivot iif(len(aCode)=3,space(1)+aCode,aCode)
用于创建交叉表查询?(交叉表查询:这种查询用于对记录计算总计、平均值、计数或其他类型总计,然后按照两类信息对结果进行分组:一组信息分布在数据表的左侧,另一组分布在数据表的顶端。)。语法TRANSFORM aggfunctionselectstatementPIVOT pivotfield [IN (value1[, value2[, ...]])]TRANSFORM 语句包含以
1、功能:
用于创建
交叉
表
查询,该查询对于记录 计算总计、平均值、计数或其他类型的查询,然后按照两类信息对结果进行分组,一组数据分布在数据
表
的左侧,另一组数据分布在数据
表
的顶端
2、语法:
TRANSFROM aggfunction
SELECT statement
PIVOT pivotfield [ in (vlaue1 [,value2 [, …]] ) ]
对参数的解析:
1、aggfunction: 对所选数据进行操作的 sql 聚合函数,常见的有 count、sum、av
SELECT SNKYGROne.ZuHao, SNKYGROne.LingQI, SNKYGroup.ExpDate,
MAX(iif([SNKYGROne.ShunXu] = 1, SNKYGROne.OnekN, 0)) AS kn1,
MAX(iif([SNKYGROne.Sh
SELECT f_wordstart,f_sourceID,max(iif(F_PROPERTY='30',f_value,'0'))as 30,
max(iif(F_PROPERTY='34',f_value,'0'))as 34
from relation where f_wordstart='mire' group by f_wordstart,f_sourceID;
背景需求:最近做列
表
数据上移和下移功能,数据库有个index字段用来存储当前对象的排列序号;
第一版代码是同事写的,上移和下移功能分成两个接口,上移的时候将index-1;下移的时候将index+1;
这个方式,真的是无力吐槽;
测试人员反馈的bug信息是,排序几次之后就失去了排序功能,点击上移和下移列
表
并没有什么变化,或者是会一下子跳几格;
好嘛,查看数据库,一堆index重复
第二版...
static void Main(string[] args)
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb";
using (OleDbConnection connection = new OleDbConnection(connectionString))
connection.Open();
OleDbCommand command = new OleDbCommand("SELECT Customers.CustomerName, Orders.OrderID FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;", connection);
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
Console.WriteLine("Customer Name: {0}, Order ID: {1}", reader["CustomerName"], reader["OrderID"]);
reader.Close();
以上示例中使用了 OleDbConnection 和 OleDbCommand 对象来连接和查询
Access
数据库中的多张
表
。在 SQL 语句中使用 INNER JOIN 可以将 Customers
表
和 Orders
表
联结起来,保证查询结果中包含这两张
表
的信息。最后使用 OleDbDataReader 来读取查询结果并输出。