Tsql 有没有可能有;“不在/不存在”;在一张桌子上,然后在另一张桌子上?
我现在正在维护一个由别人编写的大型应用程序,从一些大型政府遗留系统中挖掘数据。基本上,我需要一个查询结果来填充gridview,该gridview从技术订单中获取每个零件号,并在Fedlog表中统计匹配的零件号。如果没有找到,请查看“商业”表。现有查询当前仅在Fedlog表中查找,内容如下:Tsql 有没有可能有;“不在/不存在”;在一张桌子上,然后在另一张桌子上?,tsql,Tsql,我现在正在维护一个由别人编写的大型应用程序,从一些大型政府遗留系统中挖掘数据。基本上,我需要一个查询结果来填充gridview,该gridview从技术订单中获取每个零件号,并在Fedlog表中统计匹配的零件号。如果没有找到,请查看“商业”表。现有查询当前仅在Fedlog表中查找,内容如下: select p.*, (select case when count(*) > 0 then 'Y' else 'N' end as SL from tbl_fedlog where [Par
select p.*,
(select case when count(*) > 0 then 'Y' else 'N' end as SL
from tbl_fedlog where [Part Number] = p.[Part Number]) as SL
from tbl_pcms p
where p.[Tech Order] = '0B-E0C-9' order by p.Figure, p.[Index], p.Indenture
当我要看广告的时候。我能不能就最好的方法提出一些建议?对于“N”场景,结果应该是什么样的?只是另一个“Y”/“N”答案?如果是这样,您应该能够简单地用另一个针对“commercial”表的标量查询替换“N”表达式。这里有一个Fedlog查询和commercial查询之间的
UNION ALL
,它检查每个查询是否存在:
SELECT p.*
, SL = 'Y'
, part_count = (SELECT COUNT(*) FROM tbl_fedlog WHERE [Part Number] = p.[Part Number])
from tbl_pcms p
where p.[Tech Order] = '0B-E0C-9'
AND EXISTS(SELECT 1 FROM tbl_fedlog WHERE [Part Number] = p.[Part Number])
UNION ALL
SELECT p.*
, SL = 'Y'
, part_count = (SELECT COUNT(*) FROM tbl_commercial WHERE [Part Number] = p.[Part Number])
from tbl_pcms p
where p.[Tech Order] = '0B-E0C-9'
AND EXISTS(SELECT 1 FROM tbl_commercial WHERE [Part Number] = p.[Part Number])
AND NOT EXISTS(SELECT 1 FROM tbl_fedlog WHERE [Part Number] = p.[Part Number])
但是,我需要更多的信息来解决其他答案中提到的“N”情况。如果逻辑是在零件存在于
Fedlog
或商业
表和'N'
中时显示'Y'
,则可以尝试将这些表分别分组和聚合(外部-)将聚合结果集连接到tbl_pcms
,如下所示:
SELECT
p.*,
CASE WHEN COALESCE(f.PartCount, c.PartCount) IS NULL THEN 'N' ELSE 'Y' END AS SL
FROM tbl_pcms p
LEFT JOIN (
SELECT
[Part Number],
COUNT(*) AS PartCount
FROM tbl_fedlog
GROUP BY [Part Number]
) f ON p.[Part Number] = f.[Part Number]
LEFT JOIN (
SELECT
[Part Number],
COUNT(*) AS PartCount
FROM tbl_commercial
GROUP BY [Part Number]
) c ON p.[Part Number] = c.[Part Number]
WHERE p.[Tech Order] = '0B-E0C-9'
ORDER BY
p.Figure,
p.[Index],
p.Indenture