[英]combining a multiple queries into a single query (in SQL Server, with variables?)
[英]Combining Multiple SQL Queries Into Single Query
我有以下三个查询,我需要将它们合并为一个。 有谁知道该怎么做?
$myTasks = "";
$query = "SELECT taskID_PK " .
"FROM tasks t " .
"LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
"LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
"LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
" WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK = {$G_CLIENID} AND categoryID_FK !=0 group by taskID_PK ";
$RawData = db::select($query);
$myTasks= count($RawData);
$closeTasks = "";
$query = "SELECT taskID_PK,taskTitle,taskDescn,categoryID_FK,priority,date_format(createDate, '%d/%m/%Y') as createDate,ticketID_FK,
date_format(dueDate, '%d/%m/%Y') as dueDate ,assignByID_FK,createTime, taskStatus,closedDate,employeeName ,attachmentID_PK " .
"FROM tasks t " .
"LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
"LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
"LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
" WHERE TRUE AND isArchive != 1 AND (taskStatus != 1 ){$taskCreateClause} AND categoryID_FK !=0 group by taskID_PK ";
$RawData = db::select($query);
$closeTasks = count($RawData);
$workLoad ="";
$query = "SELECT taskID_PK,taskTitle,taskDescn,categoryID_FK,priority,date_format(createDate, '%m/%d/%Y') as createDate,ticketID_FK,
date_format(dueDate, '%m/%d/%Y') as dueDate ,assignByID_FK,createTime, taskStatus,closedDate,employeeName ,clientID_FK " .
"FROM task_assignee ta " .
"LEFT JOIN tasks t ON ta.taskID_FK = t.taskID_PK ".
"LEFT JOIN employee e ON e.employeeID_PK = ta.clientID_FK ".
" WHERE TRUE AND taskStatus = 1 ";
$RawData = db::select($query);
$workLoad = count($RawData);
好吧,现在我明白了这个问题,这样的事情怎么样:
select a.taskID_PK,
(Select count(*)) .
"FROM tasks t " .
"LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK ".
"LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK ".
"LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK ".
" WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK = {$G_CLIENID} AND categoryID_FK !=0
and task_ID_PK = a.taskID_PK) as Count1,
group by taskID_PK
....
from tasks
选择主ID,然后3条独立的select语句返回一个计数,并在开头与ID结合在一起。
SELECT
(SELECT(COUNT(DISTINCT t.taskID_PK))
FROM tasks t
LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK
LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND categoryID_FK !=0)as activetasks,
(SELECT(COUNT(DISTINCT t.taskID_PK))
FROM tasks t
LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
WHERE TRUE AND isArchive != 1 AND taskStatus = 1 AND ta.clientID_FK=1 AND categoryID_FK !=0)as mytasks,
(SELECT(COUNT(DISTINCT t.taskID_PK))
FROM tasks t
LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
WHERE TRUE AND isArchive != 1 AND taskStatus != 1 AND categoryID_FK !=0)as cloastasks,
(SELECT(COUNT(t.taskID_PK))
FROM task_assignee ta
LEFT JOIN tasks t ON ta.taskID_FK = t.taskID_PK
LEFT JOIN employee e ON e.employeeID_PK = ta.clientID_FK
WHERE TRUE AND taskStatus = 1)as workload,
(SELECT(COUNT(DISTINCT t.taskID_PK))
FROM tasks t
LEFT JOIN task_assignee ta ON ta.taskID_FK = t.taskID_PK
LEFT JOIN task_attachments a ON a.taskID_FK = t.taskID_PK
LEFT JOIN employee e ON e.employeeID_PK = t.assignByID_FK
WHERE TRUE AND isArchive = 1 AND categoryID_FK !=0)as archivetasks.
我合并了查询,我想知道是否有更好的方法可以合并这些查询以提高效率?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.