Sql server SQL server将多行作为多列
我的测试数据如下: 表中还有一个uniqueidentifier列Sql server SQL server将多行作为多列,sql-server,sql-server-2008-r2,pivot,common-table-expression,Sql Server,Sql Server 2008 R2,Pivot,Common Table Expression,我的测试数据如下: 表中还有一个uniqueidentifier列 **Month Cost** Jan 1000 Feb 1500 May 1200 我期望的结果是格式的 Jan Feb Mar Apr May 1000 1500 NULL NULL 1200 Pivot、CTE或普通查询的任何方法都可以。如果月份总是12个月,您可以轻松使用Pivot,但不需要测试: S
**Month Cost**
Jan 1000
Feb 1500
May 1200
我期望的结果是格式的
Jan Feb Mar Apr May
1000 1500 NULL NULL 1200
Pivot、CTE或普通查询的任何方法都可以。如果月份总是12个月,您可以轻松使用Pivot,但不需要测试:
SELECT
P.[Jan],P.[Feb],P.[Mar],P.[Apr]
FROM
TABLE
PIVOT
(MAX (Cost) for [Month] in ([Jan],[Feb],[Mar],[Apr])) AS P
如果需要创建动态代码,则必须生成sql代码,然后使用exec运行该代码,您可以将行转换为列
SELECT
MIN(CASE WHEN [MONTH]='JAN' THEN Cost END) AS JAN,
MIN(CASE WHEN [MONTH]='Feb' THEN Cost END) AS Feb,
MIN(CASE WHEN [MONTH]='MAR' THEN Cost END) AS MAR,
MIN(CASE WHEN [MONTH]='APR' THEN Cost END) AS APR,
MIN(CASE WHEN [MONTH]='MAY' THEN Cost END) AS MAY,
MIN(CASE WHEN [MONTH]='JUN' THEN Cost END) AS JUNE,
MIN(CASE WHEN [MONTH]='JUL' THEN Cost END) AS JUL,
MIN(CASE WHEN [MONTH]='AUG' THEN Cost END) AS AUG,
MIN(CASE WHEN [MONTH]='SEP' THEN Cost END) AS SEP,
MIN(CASE WHEN [MONTH]='OCT' THEN Cost END) AS OCT,
MIN(CASE WHEN [MONTH]='NOV' THEN Cost END) AS NOV,
MIN(CASE WHEN [MONTH]='DEC' THEN Cost END) AS DEC
FROM YOURTABLE
如果您想要值的总和,您可以像往常一样将MIN改为sum,您尝试过哪些不起作用的方法?它比pivot好吗?计划的成本是一样的,pivot更紧凑,但我认为它是一样的,非常感谢。没想到会这么简单