SELECT FNumber, ZNumber,ZName FROM kingdee_bom_view如何在sqlsever里把FNumber相同的ZNumber,ZName放到一个集合里面
时间: 2024-09-19 22:14:40 浏览: 36
在SQL Server中,如果你想将具有相同`FNumber`的`ZNumber`和`ZName`放在一起形成一个集合,你可以使用`GROUP BY`和`SELECT`语句结合子查询或者`WITH`语句创建临时表。这里有一个示例:
```sql
; WITH CTE AS (
SELECT FNumber, ZNumber, ZName,
ROW_NUMBER() OVER (PARTITION BY FNumber ORDER BY ZNumber) AS RowNum
FROM kingdee_bom_view
)
SELECT FNumber, GROUP_CONCAT(ZNumber SEPARATOR ', ') AS ZNumberList,
GROUP_CONCAT(ZName SEPARATOR ' & ') AS ZNameList
FROM CTE
WHERE RowNum = 1
GROUP BY FNumber;
```
这个查询首先通过窗口函数`ROW_NUMBER()`对每个`FNumber`下的`ZNumber`和`ZName`进行排序,并给每一行分配一个行序号。然后`WHERE`子句只选择每组的第一个元素(`RowNum = 1`),最后使用`GROUP_CONCAT`函数合并每个`FNumber`的所有`ZNumber`和`ZName`。
相关问题
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的集合。
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;
```
阅读全文