我有一张名为AssetTable的桌子,它存储着AssetId
我有另一个名为AssetBookTable的表,它存储两个字段BookId和CurrentOperationsTax
另一个表AssetBook存储AssetId和BookId作为主键。
现在,我遇到了一种情况,在这种情况下,我必须基于AssetBookTable.CurrentOperationsTax过滤记录。
这就是我现在得到的,

这就是我想要的

**
逻辑是,我希望每个AssetId只需要一个BookId,其中包含CurrentOperationsTax字段的当前/操作/税务。
**
下面是到目前为止编写的SQL小提琴:
SQLFiddle
任何帮助都是非常感谢的。
发布于 2013-09-06 18:02:43
您可以简单地删除GROUP BY BookID。但当然,您需要以某种方式聚合BookID。这里使用MIN()函数:
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.CuurentOperationsTaxhttp://sqlfiddle.com/#!6/e3477/42
发布于 2013-09-06 20:14:49
我更喜欢使用ROW_NUMBER方法。它确实需要使用子查询。总之,它是按CuurentOperationsTax编号对记录进行分组,并按图书id进行排序,并为每个分组提供行号。然后,在外部选择中,我筛选出每个分组所需的数量。在这个例子中,只有1。
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 = 1https://stackoverflow.com/questions/18663678
复制相似问题