Tsql 使用CTE连接两个表
我有两个查询返回以下输出:T1和T2 现在,我想连接T1.CMonth和T2.DueMonth字段上的两个表 最终输出应如png中所示 T1的查询: 选择WorkManagementAsset.AssetCategory、CONVERTCHAR4、WorkItem.CompleteDate、100+CONVERTCHAR4、WorkItem.CompleteDate、120作为cm月, COUNTCONVERTCHAR4,WorkItem.CompleteDate,100+CONVERTCHAR4,WorkItem.CompleteDate,总计120 从WorkManagementAsset内部联接 WorkManagementAsset.Oid上的WorkOrder=WorkOrder.Asset内部联接 WorkOrder.Oid上的WorkItem=WorkItem.WorkOrder内部联接 WorkItem.DefectItem上的InspectionDefectItem=InspectionDefectItem.Oid和WorkItem.Oid=InspectionDefectItem.WorkItem 其中不包括InspectionDefectItem.DefectGroupName,如N'Re%' 按WorkManagementAsset.AssetCategory分组,CONVERTCHAR4,WorkItem.CompleteDate,100+CONVERTCHAR4,WorkItem.CompleteDate,120 具有WorkManagementAsset.AssetCategory=N'SealedLoads'且不具有CONVERTCHAR4、WorkItem.CompleteDate、100+CONVERTCHAR4, WorkItem.CompleteDate,120为空 T2的查询: 选择WorkManagementAsset.AssetCategory,CONVERTCHAR4, WorkItem.DueDate,100+CONVERTCHAR4,WorkItem.DueDate,120 AS 上个月, COUNTCONVERTCHAR4,WorkItem.DueDate,100+CONVERTCHAR4,WorkItem.DueDate,120作为WorkManagementAsset内部联接到期的总金额 WorkManagementAsset.Oid上的WorkOrder=WorkOrder.Asset内部联接 WorkOrder.Oid上的WorkItem=WorkItem.WorkOrder内部联接 WorkItem.DefectItem上的InspectionDefectItem=InspectionDefectItem.Oid和WorkItem.Oid= InspectionDefectItem.WorkItem,其中不包括 InspectionDefectItem.DefectGroupName类似于N'Re%'分组依据 WorkManagementAsset.AssetCategory,CONVERTCHAR4,WorkItem.DueDate, 100+CONVERTCHAR4,WorkItem.DueDate,120具有 WorkManagementAsset.AssetCategory=N'sealedroads'和 CONVERTCHAR4,WorkItem.DueDate,100+CONVERTCHAR4, WorkItem.DueDate,120“0” 任何帮助都将不胜感激。 谢谢 这个Tsql 使用CTE连接两个表,tsql,join,reporting-services,common-table-expression,Tsql,Join,Reporting Services,Common Table Expression,我有两个查询返回以下输出:T1和T2 现在,我想连接T1.CMonth和T2.DueMonth字段上的两个表 最终输出应如png中所示 T1的查询: 选择WorkManagementAsset.AssetCategory、CONVERTCHAR4、WorkItem.CompleteDate、100+CONVERTCHAR4、WorkItem.CompleteDate、120作为cm月, COUNTCONVERTCHAR4,WorkItem.CompleteDate,100+CONVERTCHAR
请注意,这是一个效率极低的查询,原因有很多 感谢您的快速回复,查询生成了所需的输出。您能否指出效率低下的原因,以便我可以提高我的知识和查询效率well@FazalT像AND NOT CONVERTCHAR4、WorkItem.CompleteDate、100+CONVERTCHAR4、WorkItem.CompleteDate、120为NULL这样的奇怪信息也没有帮助。这与WorkItem.CompleteDate不为NULL有点类似吗?
WITH T1 AS
(
SELECT
WorkManagementAsset.AssetCategory,
CONVERT(CHAR(4), WorkItem.CompleteDate, 100) + CONVERT(CHAR(4), WorkItem.CompleteDate, 120) AS CMonth,
COUNT(CONVERT(CHAR(4), WorkItem.CompleteDate, 100) + CONVERT(CHAR(4), WorkItem.CompleteDate, 120)) AS Total_Complete
FROM WorkManagementAsset
INNER JOIN WorkOrder
ON WorkManagementAsset.Oid = WorkOrder.Asset
INNER JOIN WorkItem
ON WorkOrder.Oid = WorkItem.WorkOrder
INNER JOIN InspectionDefectItem
ON WorkItem.DefectItem = InspectionDefectItem.Oid AND WorkItem.Oid = InspectionDefectItem.WorkItem
WHERE (NOT (InspectionDefectItem.DefectGroupName LIKE N'Re%'))
GROUP BY
WorkManagementAsset.AssetCategory,
CONVERT(CHAR(4), WorkItem.CompleteDate, 100) + CONVERT(CHAR(4), WorkItem.CompleteDate, 120)
HAVING (WorkManagementAsset.AssetCategory = N'sealedroads')
AND (NOT (CONVERT(CHAR(4), WorkItem.CompleteDate, 100) + CONVERT(CHAR(4), WorkItem.CompleteDate, 120) IS NULL))
),
T2 AS
(
SELECT
WorkManagementAsset.AssetCategory,
CONVERT(CHAR(4), WorkItem.DueDate, 100) + CONVERT(CHAR(4), WorkItem.DueDate, 120) AS DueMonth,
COUNT(CONVERT(CHAR(4), WorkItem.DueDate, 100) + CONVERT(CHAR(4), WorkItem.DueDate, 120)) AS Total_DUE
FROM WorkManagementAsset
INNER JOIN WorkOrder
ON WorkManagementAsset.Oid = WorkOrder.Asset
INNER JOIN WorkItem
ON WorkOrder.Oid = WorkItem.WorkOrder
INNER JOIN InspectionDefectItem
ON WorkItem.DefectItem = InspectionDefectItem.Oid
AND WorkItem.Oid = InspectionDefectItem.WorkItem
WHERE (NOT (InspectionDefectItem.DefectGroupName LIKE N'Re%'))
GROUP BY WorkManagementAsset.AssetCategory,
CONVERT(CHAR(4), WorkItem.DueDate, 100) + CONVERT(CHAR(4), WorkItem.DueDate, 120)
HAVING (WorkManagementAsset.AssetCategory = N'sealedroads')
AND (CONVERT(CHAR(4), WorkItem.DueDate, 100) + CONVERT(CHAR(4), WorkItem.DueDate, 120) <> '0')
)
SELECT *
FROM T1
INNER JOIN T2 ON T1.CMonth = T2.DueMonth;