首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL视图问题

T-SQL视图问题
EN

Stack Overflow用户
提问于 2018-11-08 02:52:16
回答 2查看 41关注 0票数 0

我正在与Business Objects开发人员一起创建一个新报表。他想让我创建一个他可以查询的视图。我的问题是,我已经成功地创建了一个查询,并且已经验证了它可以工作,但是当我使用它/稍微修改它来创建一个视图时,它并没有返回正确的结果。所以我的问题有两个: 1.我错过了什么?为什么我的视图没有返回与我的查询相同的结果? 2.是否有人熟悉Business Objects,我的查询可以在Business Objects中配置吗?我们的业务对象开发人员声称这是不可能的。

下面是我的SQL查询。注意以下几点:-它基本上是一个Union,如果在Union的第二部分中已经存在匹配的记录(基于我的键),那么我将从Union的第二部分中删除记录。-有一个输入参数LOT,它被使用了三次。- Union的两个部分都在查询视图。这应该无关紧要。

代码语言:javascript
复制
SELECT [Lot]
      ,[Qty]
      ,[MOP]
      ,[MOP Revision]
      ,[G_MOP]
      ,[G_MOP Revision]
      ,[Scrap Code]
      ,[MOP Threshold]
      ,[Txn Date]
      ,[Qty Built]
      ,[Catalog]
      ,[Comments]
  FROM [MES_QAS].[MES].[V_BOBJ_SCRAP_MOP_HISTORY]
  where lot = 'TF1_80400_QA7'

  UNION

  (SELECT [Lot]
      ,[Qty]
      ,[MOP]
      ,[MOP Revision]
      ,[G_MOP]
      ,[G_MOP Revision]
      ,[Scrap Code]
      ,[MOP Threshold]
      ,[Txn Date]
      ,[Qty Built]
      ,[Catalog]
      ,[Comments]
  FROM [MES_QAS].[MES].[V_BOBJ_NO_SCRAP_ALL_MOP_HISTORY]
  where lot = 'TF1_80400_QA7'
  AND [LOT]+IsNull([MOP],[G_MOP]) NOT IN (SELECT [Lot] + IsNull([MOP],[G_MOP]) FROM [MES].[V_BOBJ_SCRAP_MOP_HISTORY] where lot = 'TF1_80400_QA7')
  )

  ORDER BY Lot, mop, g_mop

接下来,我创建了一个视图,如下所示(我去掉了LOT作为参数):

代码语言:javascript
复制
CREATE VIEW [MES].[V_BOBJ_SCRAP_ALL_MOP_HISTORY] (
    "Lot"
   ,"Qty"
   ,"MOP"
   ,"MOP Revision"
   ,"G_MOP"
   ,"G_MOP Revision"
   ,"Scrap Code"
   ,"MOP Threshold"
   ,"Txn Date"
   ,"Qty Built"
   ,"Catalog"
   ,"Comments"
   ) 
AS

(
    (
    SELECT [Lot]
          ,[Qty]
          ,[MOP]
          ,[MOP Revision]
          ,[G_MOP]
          ,[G_MOP Revision]
          ,[Scrap Code]
          ,[MOP Threshold]
          ,[Txn Date]
          ,[Qty Built]
          ,[Catalog]
          ,[Comments]
      FROM [MES].[V_BOBJ_SCRAP_MOP_HISTORY] H1
      )
      UNION
      (
      SELECT [Lot]
          ,[Qty]
          ,[MOP]
          ,[MOP Revision]
          ,[G_MOP]
          ,[G_MOP Revision]
          ,[Scrap Code]
          ,[MOP Threshold]
          ,[Txn Date]
          ,[Qty Built]
          ,[Catalog]
          ,[Comments]
      FROM [MES].[V_BOBJ_NO_SCRAP_ALL_MOP_HISTORY] A
      WHERE [LOT]+IsNull([MOP],[G_MOP]) NOT IN (SELECT [Lot] + IsNull([MOP],[G_MOP]) FROM [MES].[V_BOBJ_SCRAP_MOP_HISTORY] H2)
      )
  )
;

所以问题来了:当我运行下面的查询时,我没有得到正确的结果-我只从Union的顶部得到结果,而不是从底部得到结果:

代码语言:javascript
复制
SELECT * FROM [MES].[V_BOBJ_SCRAP_ALL_MOP_HISTORY]
where lot = 'TF1_80400_QA7'

同样,我的两个问题是: 1.我遗漏了什么-为什么我的视图不工作?有没有办法解决这个问题? 2.我的第一个查询可以在Business Objects中建模吗?

布莱恩·帕尔默( Brian Palmer ),Lakewood,科罗拉多州

EN

回答 2

Stack Overflow用户

发布于 2018-11-08 02:58:40

实际上,我认为您需要构建的是一个table function -在过滤视图的方式上与第一个硬编码的SQL有一些细微的区别。

代码语言:javascript
复制
where lot = 'TF1_80400_QA7'
AND [LOT]+IsNull([MOP],[G_MOP]) NOT IN (SELECT [Lot] + IsNull([MOP],[G_MOP]) FROM 
[MES].[V_BOBJ_SCRAP_MOP_HISTORY] where lot = 'TF1_80400_QA7')
票数 0
EN

Stack Overflow用户

发布于 2018-11-08 03:00:00

问题出在view中的subselect中,因为它不是按lot过滤的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53195937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档