sql-server - 使用 STRING_AGG 选择不同的值
问题描述
我想选择不同的客户,所以我写了这个查询:
SELECT
STRING_AGG( ISNULL(Concat(Year(info.[CreationDate]),'/',Trim('BS-' from info.ProjectN)) , ' '), ' ;') As 'AllProjectN'
,STRING_AGG( ISNULL(part.Designation , ' '), ' ;') As 'AllDesignation'
,STRING_AGG( ISNULL([GalvaQualityDailyFicheControle].[Quantity] , ' '), ' ;') As 'AllQuantity'
,[GalvaQualityDailyFicheControle].[CreationDate]
,(SELECT STRING_AGG( ISNULL(cust.Name , ' '), ' ;')
WITHIN GROUP (ORDER BY cust.Name)
FROM (SELECT distinct cust.Name FROM Customer)as x) AS AllCustomer
FROM [dbo].[GalvaQualityDailyFicheControle]
Inner Join GalvaQualityDailyProduction prod on prod.id=
[GalvaQualityDailyFicheControle].FK_idDailyProduction
Inner join GalvaParts part on part.id=prod.[FK_idPart]
Inner join ProjectInfoGalva info on info.id=part.IdProject
inner Join Customer cust on cust.ID=info.FK_Customer
Group By cust.Name,[GalvaQualityDailyFicheControle].[CreationDate]
我怎样才能获得一个独特的客户?
解决方案
答案1:
SELECT
STRING_AGG( ISNULL(Concat(Year(info.[CreationDate]),'/',Trim('BS-' from info.ProjectN)) , ' '), ' ;') As 'AllProjectN'
,STRING_AGG( ISNULL(part.Designation , ' '), ' ;') As 'AllDesignation'
,STRING_AGG( ISNULL([GalvaQualityDailyFicheControle].[Quantity] , ' '), ' ;') As 'AllQuantity'
,[GalvaQualityDailyFicheControle].[CreationDate]
,STRING_AGG( ISNULL(cust.Name , ' '), ' ;') WITHIN GROUP (ORDER BY cust.Name) AS AllCustomer
FROM [dbo].[GalvaQualityDailyFicheControle]
Inner Join GalvaQualityDailyProduction prod on prod.id = [GalvaQualityDailyFicheControle].FK_idDailyProduction
Inner join GalvaParts part on part.id=prod.[FK_idPart]
Inner join ProjectInfoGalva info on info.id=part.IdProject
inner Join Customer cust on cust.ID=info.FK_Customer
Group By [GalvaQualityDailyFicheControle].[CreationDate]
答案 2:
With CustomersName as (
SELECT
[GalvaQualityDailyFicheControle].[CreationDate]
,STRING_AGG(ISNULL(cust.[Name] , ' '), ' ;') WITHIN GROUP (ORDER BY cust.[Name]) as AllCustomer
FROM [dbo].[GalvaQualityDailyFicheControle]
Inner Join GalvaQualityDailyProduction prod on prod.id = [GalvaQualityDailyFicheControle].FK_idDailyProduction
Inner join GalvaParts part on part.id=prod.[FK_idPart]
Inner join ProjectInfoGalva info on info.id=part.IdProject
inner Join Customer cust on cust.ID=info.FK_Customer
Group By [GalvaQualityDailyFicheControle].[CreationDate]
)
SELECT
STRING_AGG( ISNULL(Concat(Year(info.[CreationDate]),'/',Trim('BS-' from info.ProjectN)) , ' '), ' ;') As 'AllProjectN'
,STRING_AGG( ISNULL(part.Designation , ' '), ' ;') As 'AllDesignation'
,STRING_AGG( ISNULL([GalvaQualityDailyFicheControle].[Quantity] , ' '), ' ;') As 'AllQuantity'
,[GalvaQualityDailyFicheControle].[CreationDate]
,CustomersName.AllCustomer
FROM [dbo].[GalvaQualityDailyFicheControle]
Inner Join GalvaQualityDailyProduction prod on prod.id = [GalvaQualityDailyFicheControle].FK_idDailyProduction
Inner join GalvaParts part on part.id=prod.[FK_idPart]
Inner join ProjectInfoGalva info on info.id=part.IdProject
inner Join CustomersName on CustomersName.ID=info.FK_Customer
Group By CustomersName.AllCustomer, [GalvaQualityDailyFicheControle].[CreationDate]
推荐阅读
- python - 正则表达式:在前瞻断言的最后一次匹配之后查找文本,直到前瞻断言的第一次匹配
- reactjs - 链接状态打字稿错误:“状态:{ id:任意;名称:任意;};}' 不可分配给类型”
- reactjs - 存储语义 UI 下拉菜单的多个值
- sql - 在 Bigquery 中生成空数组结构
- ios - 绘制和合成 UIImage 时如何应用比例
- sql-server-2016 - SQL Server 索引和复合键
- javascript - 如何停止已经在调用堆栈中的异步循环?
- scheme - 方案/球拍中的汽车和 Cdr
- php - `getimagesize` 给出错误`文件名不能为空` PHP 8
- python - 将值附加到python中的字典