2

我现在正在维护一个大型应用程序,其他人编写了从一些大型政府遗留系统中挖掘一些数据。基本上,我需要一个查询结果来填充一个网格视图,该网格视图从技术订单中获取每个部件号,并计算 Fedlog 表中匹配的部件号。如果没有找到,请查看“商业”表。现有查询目前仅在 Fedlog 表中查找,内容如下:

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'时,我必须查看商业表。我可以就解决此问题的最佳方法提出一些建议吗?

4

3 回答 3

1

'N' 场景的结果应该是什么样的 - 只是另一个'Y'/'N' 答案?如果是这样,您应该能够简单地将“N”表达式替换为针对“商业”表的另一个标量查询。

于 2012-05-31T16:53:59.573 回答
0

这是UNION ALLFedlog 查询和商业查询之间的一个查询,用于检查每个查询是否存在:

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”场景。

于 2012-05-31T17:06:33.347 回答
0

如果逻辑是'Y'在零件存在于FedlogCommercial表中时显示,'N'否则您可以尝试分别对这些表进行分组和聚合,并将聚合结果集(外部)连接到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
于 2012-06-01T05:46:07.560 回答