SQL 服务器:将两行合并为一行
SQL Server : merge two rows into one
我写了这个 T-SQL 查询:
SELECT
B.[Year], E.[Description] as GLClass,
D.Code, D.[GLDescription],
SUM(A.Jan) AS Jan,
SUM(A.Feb) AS Feb,
SUM(A.Mar) AS Mar,
SUM(A.Apr) AS Apr
FROM
GeneralLedgers A
INNER JOIN
Years B ON A.YearID = B.ID
INNER JOIN
CostCenters C ON A.CostCenterID = C.ID
INNER JOIN
GLCodes D ON A.GLCodeID = D.ID
INNER JOIN
GLClassificationTypes E ON D.GLClassificationTypeID = E.ID
WHERE
A.YearID = '13'
GROPU BY
B.[Year], D.Code, E.[Description], D.[GLDescription]
ORDER BY
D.Code, E.[Description]
它输出这个结果:
我想将 "Freight-in (Go) and Freight Savings" 行合并为一行并对一月、二月、三月、四月列的值求和。我试图在 "Code" 列上使用 Case When 子句查找“401040110”和“441010300”,但仍然找不到。
如何实现?
将 2 行中的其中一行转换为另一行以用于分组逻辑,其余的聚合应该无缝地在此之上工作。
SELECT B.[Year]
,E.[Description] AS GLClass
,case when D.Code = '441010300' then '401040110' else D.Code END Code
,case when D.Code = '441010300' then 'Freight-in (Go)' else D.[GLDescription] end [GLDescription]
,Sum(A.Jan) AS Jan
,Sum(A.Feb) AS Feb
,Sum(A.Mar) AS Mar
,Sum(A.Apr) AS Apr
FROM GeneralLedgers A
INNER JOIN Years B ON A.YearID = B.ID
INNER JOIN CostCenters C ON A.CostCenterID = C.ID
INNER JOIN GLCodes D ON A.GLCodeID = D.ID
INNER JOIN GLClassificationTypes E ON D.GLClassificationTypeID = E.ID
WHERE A.YearID = '13'
GROUP BY B.[Year]
, case when D.Code = '441010300' then '401040110' else D.Code END
, E.[Description]
, case when D.Code = '441010300' then 'Freight-in (Go)' else D.[GLDescription] end
ORDER BY 3,2
我写了这个 T-SQL 查询:
SELECT
B.[Year], E.[Description] as GLClass,
D.Code, D.[GLDescription],
SUM(A.Jan) AS Jan,
SUM(A.Feb) AS Feb,
SUM(A.Mar) AS Mar,
SUM(A.Apr) AS Apr
FROM
GeneralLedgers A
INNER JOIN
Years B ON A.YearID = B.ID
INNER JOIN
CostCenters C ON A.CostCenterID = C.ID
INNER JOIN
GLCodes D ON A.GLCodeID = D.ID
INNER JOIN
GLClassificationTypes E ON D.GLClassificationTypeID = E.ID
WHERE
A.YearID = '13'
GROPU BY
B.[Year], D.Code, E.[Description], D.[GLDescription]
ORDER BY
D.Code, E.[Description]
它输出这个结果:
我想将 "Freight-in (Go) and Freight Savings" 行合并为一行并对一月、二月、三月、四月列的值求和。我试图在 "Code" 列上使用 Case When 子句查找“401040110”和“441010300”,但仍然找不到。
如何实现?
将 2 行中的其中一行转换为另一行以用于分组逻辑,其余的聚合应该无缝地在此之上工作。
SELECT B.[Year]
,E.[Description] AS GLClass
,case when D.Code = '441010300' then '401040110' else D.Code END Code
,case when D.Code = '441010300' then 'Freight-in (Go)' else D.[GLDescription] end [GLDescription]
,Sum(A.Jan) AS Jan
,Sum(A.Feb) AS Feb
,Sum(A.Mar) AS Mar
,Sum(A.Apr) AS Apr
FROM GeneralLedgers A
INNER JOIN Years B ON A.YearID = B.ID
INNER JOIN CostCenters C ON A.CostCenterID = C.ID
INNER JOIN GLCodes D ON A.GLCodeID = D.ID
INNER JOIN GLClassificationTypes E ON D.GLClassificationTypeID = E.ID
WHERE A.YearID = '13'
GROUP BY B.[Year]
, case when D.Code = '441010300' then '401040110' else D.Code END
, E.[Description]
, case when D.Code = '441010300' then 'Freight-in (Go)' else D.[GLDescription] end
ORDER BY 3,2