kingdee_bom_view当内码相同取最大的fnumber如何书写sql
时间: 2024-09-20 08:03:53 浏览: 31
如果你想要在Kingdee BOM视图 (`kingdee_bom_view`) 中,对于内码(假设是FMATERIALID)相同的记录,选择其中FNUMBER值最大的一行,可以使用`ROW_NUMBER()`窗口函数结合`TOP(1)`来实现。这是一个典型的分组并排序场景。以下是SQL查询的示例:
```sql
WITH CTE AS (
SELECT
KBV.*,
ROW_NUMBER() OVER(PARTITION BY 父项物料代码 ORDER BY FNUMBER DESC) AS RowNum
FROM
kingdee_bom_view AS KBV
)
SELECT
*
FROM
CTE
WHERE
RowNum = 1
```
在这个查询中:
- `ROW_NUMBER() OVER(PARTITION BY 父项物料代码 ORDER BY FNUMBER DESC)`:对每组父项物料代码进行分组,并按照FNUMBER字段降序排序,给每一行分配一个行号。
- `RowNum = 1`: 只选择每个分组中的第一行(即FNUMBER最大的那一行)。
相关问题
select kbv.* from kingdee_bom_view kbv inner join T_ENG_BOM teb on kbv.BOM版本 = teb.FNUMBER只要其中T_ENG_BOM里面FMATERIALID相同FNUMBER最大的数据
这个SQL查询的意思是从两个表`kingdee_bom_view`(kbv)和`T_ENG_BOM`(teb)中选取信息。它通过联接条件`kbv.BOM版本 = teb.FNUMBER`将这两个表关联起来。特定的,它会选择`T_ENG_BOM`表中FMATERIALID字段值相同的行,并且只保留FNUMBER字段最大值的数据。
所以,查询结果会返回`kbv`表的所有列(kbv.*),其中的记录与`T_ENG_BOM`表中FMATERIALID相同且FNUMBER字段的最大值相对应。
对应的SQL查询语句可能是这样的:
```sql
SELECT kbv.*
FROM kingdee_bom_view kbv
INNER JOIN (
SELECT FMATERIALID, MAX(FNUMBER) as max_FNUMBER
FROM T_ENG_BOM
GROUP BY FMATERIALID
) teb_temp ON kbv.BOM版本 = teb_temp.FNUMBER
INNER JOIN T_ENG_BOM teb ON teb.FMATERIALID = teb_temp.FMATIRELID AND teb.FNUMBER = teb_temp.max_FNUMBER;
```
SELECT FNumber, ZNumber,ZName FROM kingdee_bom_view如何把FNumber相同的ZNumber,ZName放到一个集合里面
在SQL查询中,当你想要将`kingdee_bom_view`表中FNumber字段相同的ZNumber和ZName组合到一起,你可以利用GROUP BY语句结合集合相关的数据库操作。这里是一个基本的步骤:
1. 使用`GROUP BY`按FNumber进行分组,这样所有具有相同FNumber的行会被归在一起。
2. 然后可以使用聚合函数如`SELECT ZNumber, ZName`,这些函数会在每个分组内返回一个值,通常是通过`DISTINCT`去除重复的ZNumber和ZName。
3. 如果你想要的结果是集合而不是明确定义的表格,这取决于具体的数据库管理系统。在MySQL中,你可以创建一个临时表或者视图;在某些支持JSON的系统里,可能会使用`GROUP_CONCAT`或类似功能将结果转换成字符串列表。
示例SQL查询可能如下(假设你的数据库支持GROUP_CONCAT):
```sql
SELECT FNumber,
GROUP_CONCAT(DISTINCT ZNumber) AS ZNumberList,
GROUP_CONCAT(ZName) AS ZNameList
FROM kingdee_bom_view
GROUP BY FNumber;
```
这将为你提供每个FNumber对应的ZNumber和ZName的集合。
阅读全文