gpt4 book ai didi

sql-server - 如果没有找到记录,则分组并返回零

转载 作者:行者123 更新时间:2023-12-01 16:13:42 26 4
gpt4 key购买 nike

我知道有很多关于这个话题的话题。

我正在尝试创建一个返回预定义搜索记录的查询,如果没有找到任何结果,我想返回零。大多数线程建议我们创建一个临时表来存放这些分组数据,但我需要在一条语句中完成。但是我们可以使用子查询。


这是我的原始代码...

它返回正确的值但不包含没有票的分组:

SELECT SC.Service_Company_Code
, SSPM.Mapping
, COUNT(T.Service_Ticket_Id) AS 'Ticket_Count'
FROM SV_Service_Ticket T
INNER JOIN KS_SedonaSync_Problem SSP ON T.Sub_Problem_Id = SSP.Problem_Id
RIGHT JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON SSP.SedonaSync_Problem_Sub_Mapping_Id = SSPM.SedonaSync_Problem_Sub_Mapping_Id
RIGHT JOIN SV_Service_Company SC ON T.Service_Company_Id = SC.Service_Company_Id
WHERE SC.Vendor_Id = 1
AND SC.Inactive = 'N'
AND SC.Service_Company_Id <> 1
AND SSPM.Inactive = 'N'
AND T.Ticket_Status <> 'CL'
GROUP BY SC.Service_Company_Code, SSPM.Mapping
ORDER BY SC.Service_Company_Code, SSPM.Mapping

我修改后的代码...

现在包含一个子查询,该子查询确实显示了正确的分组并且单独运行而没有链接到 Ticket 表中。但是当链接到工单表时,如果没有记录,它不会显示分组。当记录不存在时,左连接的使用应该向我显示空记录。

SELECT Q.Service_Company_Code
, Q.Mapping
, COUNT(T.Service_Ticket_Id) AS 'Ticket_Count'
FROM (SELECT SC.Service_Company_Id, SC.Service_Company_Code, SSP.Problem_Id, SSPM.SedonaSync_Problem_Sub_Mapping_Id, SSPM.Mapping
FROM SV_Service_Company SC
FULL OUTER JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON 1=1
LEFT JOIN KS_SedonaSync_Problem SSP ON SSPM.SedonaSync_Problem_Sub_Mapping_Id = SSP.SedonaSync_Problem_Sub_Mapping_Id
WHERE SC.Vendor_Id = 1
AND SC.Inactive = 'N'
AND SC.Service_Company_Id <> 1
AND SSPM.Inactive = 'N'
) Q
LEFT JOIN SV_Service_Ticket T ON T.Sub_Problem_Id = Q.Problem_Id AND T.Service_Company_Id = Q.Service_Company_Id
WHERE T.Ticket_Status <> 'CL'
GROUP BY Q.Service_Company_Code, Q.Mapping
ORDER BY Q.Service_Company_Code, Q.Mapping

非常欢迎任何帮助,在此先感谢您。

布拉德·斯温德尔

编辑:这是当前结果集。

enter image description here

这是想要的结果集。

enter image description here

编辑:感谢 Mike M,我找到了一个可行的解决方案!

SELECT SC.Service_Company_Code
, SSPM.Mapping
, COUNT(T.Service_Ticket_Id) AS 'Ticket_Count'
FROM SV_Service_Company SC
CROSS JOIN KS_SedonaSync_Problem SSP
INNER JOIN KS_SedonaSync_Problem_Sub_Mapping SSPM ON SSP.SedonaSync_Problem_Sub_Mapping_Id = SSPM.SedonaSync_Problem_Sub_Mapping_Id
AND SC.Vendor_Id = 1
AND SC.Inactive = 'N'
AND SC.Service_Company_Id <> 1
LEFT JOIN SV_Service_Ticket T ON T.Sub_Problem_Id = SSP.Problem_Id
AND T.Service_Company_Id = SC.Service_Company_Id
AND T.Ticket_Status <> 'CL'
WHERE SSPM.Inactive = 'N'
GROUP BY SC.Service_Company_Code, SSPM.Mapping
ORDER BY SC.Service_Company_Code, SSPM.Mapping

最佳答案

您是否尝试过将 WHERE 子句中的最后一位移动到连接条件中?NULL 不 = 或 <> 任何东西 :)

所以

T.Ticket_Status <> 'CL'

可能无法提取那些具有 NULL 的行。

添加“和 T.Ticket_Status <> 'CL'”作为加入条件中的另一个项目,有

 LEFT JOIN SV_Service_Ticket T ON T.Sub_Problem_Id = Q.Problem_Id AND T.Service_Company_Id = Q.Service_Company_Id and T.Ticket_Status <> 'CL'



所以您知道我们的出发点,这是我们(和您)希望发生的基本情况。你确定子查询已经解决了吗?

if object_id('tempdb..#tempItems') is not null
drop table #tempItems;


create table #tempItems (
id int primary key
, category varchar(100)
, subCategory varchar(100)

)
;

insert into #tempItems (id, category, subCategory)
values (1, 'First', 'subA');
insert into #tempItems (id, category, subCategory)
values (2, 'First', 'subB');
insert into #tempItems (id, category, subCategory)
values (3, 'Second', 'subA');
insert into #tempItems (id, category, subCategory)
values (4, 'NotFound', 'subNotFound');


---------------------------------------------------------

if object_id('tempdb..#tempCounts') is not null
drop table #tempCounts;


create table #tempCounts (
id int primary key
, itemId int
)
;

insert into #tempCounts (id, itemId)
values (1, 1);
insert into #tempCounts (id, itemId)
values (2, 2);
insert into #tempCounts (id, itemId)
values (3, 3);
insert into #tempCounts (id, itemId)
values (4, 3);


----------------------------------------------------------





select
items.category
,items.subcategory
, count(counts.id) as count
from
#tempItems items
left join #tempCounts counts on items.id = counts.itemid

group by items.category, items.subcategory
order by items.category, items.subcategory

关于sql-server - 如果没有找到记录,则分组并返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com