假设我有一个这种形式的表:
ID Value Data
1 A
1 B
1 C
2 Q
2 J
3 D
我希望查询返回...
A (3 total)
Q (2 total)
D (1 total)
所以正如标题所说,我想在 ID 值发生变化时第一次获取“数据”的值。有3个ID值为1,Data的第一个值为A,所以返回A(共3个)。有两个ID值两个,Data的第一个值是Q,所以我返回Q(共2个),以此类推。
我在一个网站上做这个,所以我在如何打印东西上有一点自由。我目前正在执行两个查询,然后将它们与一个简单的 printf 一起打印(真实数据的数据列比上面示例中的多)。
$sql = "SELECT COUNT(VIN)
AS vinCount
FROM TestTable
WHERE (JobNumber='$jobNum') AND (AssignedEmp='$EmpName')
GROUP BY WorkOrderNumber";
在此示例中,WorkOrderNumber 扮演 ID 值的角色,我试图将 VIN 的数量相加
这每次都会抓取正确的数字(例如“总共 3 个”),不会失败。
我真正的问题是获取第一行值(上面示例中的 A、Q、D)。问题是我不能有一个'where WorkOrderNumber='语句,因为事先我不知道它们是什么。它们是用户生成的,所以我不得不查找它们。
有什么我忽略的吗?这是我第一次尝试的查询,显然不起作用。
$sql = "SELECT FIRST (JobStage + ' ' + WorkItem + ' ' + VIN + ' ' + Make + ' ' + Model + ' ' + ExColor)
AS WorkSelection
FROM TestTable
WHERE (JobNumber='$jobNum') AND (AssignedEmp='$EmpName')";
是否有某种 WHERE 子句我可以添加到这在逻辑上等同于“如果这是 WorkOrderNumber 的前所未见的值,抓住它”?
编辑:我最终这样做了....
//Grab number of cars
$sql = "SELECT COUNT(VIN)
AS vinCount
FROM TestTable
WHERE (JobNumber='$jobNum') AND (AssignedEmp='$EmpName')
GROUP BY WorkOrderNumber";
$number = odbc_exec($connection, $sql);
//Grab car description
$sql = "SELECT (tmp.JobStage + ' ' + WorkItem + ' ' + VIN + ' ' + Make) AS WorkSelection
FROM ( SELECT JobStage, WorkItem, VIN, Make FROM TestTable WHERE (JobNumber='$jobNum') AND (AssignedEmp='$EmpName')) AS tmp";
$rs = odbc_exec($connection, $sql);
while(odbc_fetch_row($number)){
odbc_fetch_row($rs);
odbc_fetch_row($rs);
$count = odbc_result($number, 'vinCount');
$row = odbc_result($rs, 'WorkSelection');
//$row = odbc_result($rs, 'WorkSelection');
printf("<option value='%s'>(%s other cars) %s</option>", $row, $count, $row);
}
只需将其拆分为两个查询,然后将它们一起打印出来。