首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于列值的行过滤

基于列值的行过滤
EN

Stack Overflow用户
提问于 2013-09-06 17:49:37
回答 2查看 99关注 0票数 2

我有一张名为AssetTable的桌子,它存储着AssetId

我有另一个名为AssetBookTable的表,它存储两个字段BookIdCurrentOperationsTax

另一个表AssetBook存储AssetIdBookId作为主键。

现在,我遇到了一种情况,在这种情况下,我必须基于AssetBookTable.CurrentOperationsTax过滤记录。

这就是我现在得到的,

这就是我想要的

**

逻辑是,我希望每个AssetId只需要一个BookId,其中包含CurrentOperationsTax字段的当前/操作/税务。

**

下面是到目前为止编写的SQL小提琴:

SQLFiddle

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-06 18:02:43

您可以简单地删除GROUP BY BookID。但当然,您需要以某种方式聚合BookID。这里使用MIN()函数:

代码语言:javascript
复制
SELECT
   ab.AssetId
  ,MIN(ab.BookId) as BookID
  ,abt.CuurentOperationsTax
FROM
 AssetBook ab
JOIN AssetTable at ON at.AssetId = ab.AssetId
JOIN AssetBookTable abt ON abt.BookId = ab.BookId
GROUP BY 
   ab.AssetId
  ,abt.CuurentOperationsTax

http://sqlfiddle.com/#!6/e3477/42

票数 1
EN

Stack Overflow用户

发布于 2013-09-06 20:14:49

我更喜欢使用ROW_NUMBER方法。它确实需要使用子查询。总之,它是按CuurentOperationsTax编号对记录进行分组,并按图书id进行排序,并为每个分组提供行号。然后,在外部选择中,我筛选出每个分组所需的数量。在这个例子中,只有1。

代码语言:javascript
复制
SELECT   AssetId
        ,BookId
        ,CuurentOperationsTax
        ,RowNum
FROM   (
        SELECT
           ab.AssetId
          ,ab.BookId
          ,abt.CuurentOperationsTax
          ,ROW_NUMBER() OVER(PARTITION BY abt.CuurentOperationsTax ORDER BY ab.BookId) AS RowNum
        FROM
         AssetBook ab
        JOIN AssetTable AT ON AT.AssetId = ab.AssetId
        JOIN AssetBookTable abt ON abt.BookId = ab.BookId
      ) AS b
WHERE b.RowNum = 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18663678

复制
相关文章

相似问题

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