我有一个名为 AssetTable
的表,用于存储 AssetId
我还有一个名为 AssetBookTable
的表格,其中存储了两个字段 BookId 和 CurrentOperationsTax
另一个表 AssetBook
,将 AssetId 和 BookId 存储为foriegn键。
现在,我有一种情况,我必须根据记录过滤记录 AssetBookTable.CurrentOperationsTax
这是我现在得到的,
这就是我想要的:
**
逻辑是我想要每个AssetId只有一个BookId,它对CurrentOperationsTax字段有Current / Operation / Tax。
**
这是迄今为止写的SQL小提琴:
非常感谢任何帮助。
答案 0 :(得分:1)
您可以简单地删除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.CuurentOperationsTax
答案 1 :(得分:1)
我更喜欢使用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 = 1