sql-server - 当我们使用 group by 时,视图中的行数据值可以显示在单独的列中
问题描述
我的 SQL 代码是这样的:
CREATE VIEW [dbo].[UDV_Project_Summary_With_Beneficiary]
SELECT
FiscalYear.FiscalYearName AS [Fiscal Year],
dbo.Region.RegionName AS Region,
COUNT(DISTINCT(Project.ProjectID)) AS [No of Projects],
SUM(ISNULL(Project.Amount, 0) + ISNULL(Project.ContAmount, 0)) AS Amount,
[dbo].[UDF_Get_BName](1, [dbo].[ProjectBeneficiaryDetail].BeneficiaryTypeID) AS Beneficiaries,
SUM(ISNULL(ActualNoOfMale, 0)) AS Men,
SUM(ISNULL(ActualNoOfFemale, 0)) AS Women,
SUM(ISNULL(ActualNoOfMale, 0) + ISNULL(ActualNoOfFemale, 0)) AS Total
FROM
dbo.Project
INNER JOIN
dbo.Commune ON dbo.Project.CommuneIdProject = dbo.Commune.CommuneId
INNER JOIN
dbo.Arrondissement ON dbo.Arrondissement.[ArrondissementId] = dbo.Commune.[ArrondissementId]
INNER JOIN
dbo.Cercle ON dbo.Cercle.CercleId = dbo.Arrondissement.CercleId
INNER JOIN
dbo.Region ON dbo.Region.RegionId = dbo.Cercle.RegionId
INNER JOIN
ImplementingPartner ON dbo.ImplementingPartner.IPID = dbo.Project.IPID
INNER JOIN
FiscalYear ON dbo.Project.FiscalYearID = dbo.FiscalYear.FiscalYearID
INNER JOIN
ProjectCategory ON dbo.Project.ProjectCategoryID = dbo.ProjectCategory.ProjectCategoryID
INNER JOIN
ProjectStatus ON dbo.Project.ProjectStatusID = dbo.ProjectStatus.ProjectStatusID
INNER JOIN
[dbo].[ImplementingPartnerType] ON [dbo].[ImplementingPartnerType].[ImplementingPartnerTypeID] = ImplementingPartner.[ImplementingPartnerTypeID]
LEFT JOIN
[dbo].[ProjectBeneficiaryDetail] ON dbo.Project.ProjectID = dbo.[ProjectBeneficiaryDetail].ProjectID
GROUP BY
FiscalYear.FiscalYearName, Region.RegionName, [dbo].[ProjectBeneficiaryDetail].BeneficiaryTypeID
结果显示在此屏幕截图中:
但我想使用 SQL 代码显示如下图像数据。请帮我怎么做
我试图通过使用 PIVOT 来做到这一点,但没有成功。我尝试像第 1 步一样,我从视图中插入了 Beneficiary_ProjectType_Template 中的值
从 [dbo] 中选择 [干预区域]、[项目数量]、金额、受益人、男性、女性、总计到 Beneficiary_ProjectType_Template。[UDV_Project_Summary_With_Beneficiary_ProjectType]
步骤 2 在 SQL 下面
声明 @cols 为 NVARCHAR(MAX),@query 为 NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(dbo.Beneficiary_ProjectType_Template.[No of Projects]) from Beneficiary_ProjectType_Template group by Beneficiary_ProjectType_Template.[No of Projects] order by Beneficiary_ProjectType_Template.[No of Projects] FOR XML PATH('' ), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT [Intervention Areas] ' + @cols + ' from ( select [Intervention Areas], [No of Projects], Amount, Beneficiaries from Beneficiary_ProjectType_Template ) x pivot ( count(Amount) for Beneficiaries in (' + @列 + ') ) p '
执行(@查询);帮助我如何使用正确的方式来获得如下图所示的结果。提前致谢
解决方案
推荐阅读
- kubernetes - 使用 helm 图表在 GCP GKE 中安装 IBM Mq,出现 kube 版本错误
- excel - VBA 仅从另一个工作簿更新和插入新数据
- c# - 当进程退出事件触发不起作用时,C#启用/禁用用户表单
- excel - 将信息从一个文件传输到最终文件
- swift - Swift Scene Delegate 在首次启动时不运行代码
- c# - LINQ 分组依据
- kotlin - 在 Kotlin 中传递 StringBuilder::append 作为参数
- pytorch - ImportError:TensorBoard 日志记录需要 TensorBoard 1.15 或更高版本
- java - 使用 Java 和 Jolt 将 Json 字符串转换为 Json
- python - 使用 matplotlib 在一个图中绘制两个子图