SQL Server 如何使用PIVOT或任何其他方法在sql中获取以下格式[已关闭]

eh57zj3b  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(134)

2分钟前关门了。
Improve this question
我的存储过程以下面的格式返回数据。
存储过程:

select
es.Name as EStaffName,
ca.CoreAppName as SiteResourceCoreAppCostCenterName,
r.[Year] as [Year],
SUM(ird.Q1+ird.Q2+ird.Q3+ird.Q4) as HeadCount,
SUM((ird.Q1*r.Rate)+(ird.Q2*r.Rate)+(ird.Q3*r.Rate)+(ird.Q4*r.Rate)) as HeadCost
from tblSiteMaster sm
inner join tblRates r on sm.SiteId = r.SiteId
inner join tblResourceType rt on r.ResourceTypeId = rt.ResourceTypeId
inner join tblSiteType st on r.SiteTypeId = st.SiteTypeId
inner join InputResource ir on ir.SiteID = r.SiteId
inner join tblCoreApp ca on ir.CoreAppID = ca.CoreAppID
inner join InputResourceDetail ird on ird.InputResourceId = ir.InputResourceId
inner join EStaff es on es.EStaffId = ir.EStaffId
inner join Estimate on ir.EstimateID = Estimate.EstimateID
inner join EFIT on EFIT.EFITID = Estimate.EFITID
inner join Workspace on EFIT.WorkspaceID = Workspace.WorkspaceId
where EFIT.WorkspaceId = 74 and EFIT.EFITVersion = 0.10 and EFIT.EFITTypeID = 1 and r.[year] = ird.[Year]
group by es.Name,ca.CoreAppName,r.[year]
order by es.Name,ca.CoreAppName,r.[year]

Output:

如何修改存储过程,使其以下面的SQL Server格式返回输出

任何帮助都将不胜感激。

mrzz3bfm

mrzz3bfm1#

为什么要问如何修改存储过程而不发布存储过程的代码呢?在没有看到原始代码的情况下,我们只能推测解决方案。
如果原始查询如下所示:

SELECT
  StaffName
  , SiteName
  , [Year]
  , HeadCount
  , HeadCost
FROM TableName

然后,为了获得所需的透视表,修改后的查询可能如下所示:

CREATE TABLE staff (
  StaffName nvarchar(50)
  , SiteName nvarchar(50)
  , [Year] int
  , HeadCount int
  , HeadCost decimal(19,2)
  );

INSERT INTO staff (StaffName, SiteName, [Year], HeadCount, HeadCost)
VALUES ('GPOMO', 'C - CANA', 2020, 4, 125)
  , ('GPOMO', 'C - CANA', 2021, 2, 62.5)
  , ('GPOMO', 'C - CANA', 2022, 1, 31.25)
  , ('REG', 'C - Apolo', 2020, 1, 151.289)
  , ('REG', 'C - Apolo', 2021, 1, 151.289)
;

SELECT
  StaffName
  , SiteName
  , [Year]
  , HeadCount
  , HeadCost
FROM staff;

SELECT 
  PivotTable.[Year]
  , MAX(ISNULL(PivotTable.[C - CANA], 0)) as [C - CANA]
  , MAX(ISNULL(PivotTable.[C - Apolo], 0)) as [C - Apolo]
  , SUM(ISNULL(PivotTable.[C - CANA], 0) + ISNULL(PivotTable.[C - Apolo],0)) as GrandTotal
FROM (
  SELECT
    SiteName
    , [Year]
    , HeadCount
    , HeadCost
  FROM staff
) as SourceTable
PIVOT (
  SUM(HeadCost)
  FOR SiteName IN ("C - CANA", "C - Apolo")
) as PivotTable
GROUP BY PivotTable.[Year]

| 职员姓名|站点名称|年份|人数|总成本|
| - ------| - ------| - ------| - ------| - ------|
| 全球定位系统|C-加拿大|小行星2020|四个|一百二十五分|
| 全球定位系统|C-加拿大|小行星2021|第二章|六十二块五角|
| 全球定位系统|C-加拿大|小行星2022| 1个|三十一点二十五分|
| 注册|C-阿波罗|小行星2020| 1个|一百五十一点二九|
| 注册|C-阿波罗|小行星2021| 1个|一百五十一点二九|
| 年份|C-加拿大|C-阿波罗|总计|
| - ------| - ------| - ------| - ------|
| 小行星2020|一百二十五分|一百五十一点二九|二百七十六点二九|
| 小行星2021|六十二块五角|一百五十一点二九|二一三点七九|
| 小行星2022|三十一点二十五分|0.00美元|三十一点二十五分|
fiddle

相关问题