【问题标题】:Returning multiple case statements on one row in T-SQL在 T-SQL 中的一行上返回多个 case 语句
【发布时间】:2020-02-14 13:13:25
【问题描述】:

我正在使用以下 T-SQL 语句返回一些值:

CASE WHEN month(m.pcp_startdate) = 1 THEN m.pcp_value ELSE NULL END AS January,
CASE WHEN month(m.pcp_startdate) = 2 THEN m.pcp_value ELSE NULL END AS Febuary,
CASE WHEN month(m.pcp_startdate) = 3 THEN m.pcp_value ELSE NULL END AS March,
CASE WHEN month(m.pcp_startdate) = 4 THEN m.pcp_value ELSE NULL END AS April,
CASE WHEN month(m.pcp_startdate) = 5 THEN m.pcp_value ELSE NULL END AS May,
CASE WHEN month(m.pcp_startdate) = 6 THEN m.pcp_valuen ELSE NULL END AS June,
CASE WHEN month(m.pcp_startdate) = 7 THEN m.pcp_value ELSE NULL END AS July,
CASE WHEN month(m.pcp_startdate) = 8 THEN m.pcp_value ELSE NULL END AS August,
CASE WHEN month(m.pcp_startdate) = 9 THEN m.pcp_value ELSE NULL END AS September,
CASE WHEN month(m.pcp_startdate) = 10 THEN m.pcp_value ELSE NULL END AS October,
CASE WHEN month(m.pcp_startdate) = 11 THEN m.pcp_value ELSE NULL END AS November,
CASE WHEN month(m.pcp_startdate) = 12 THEN m.pcp_value ELSE NULL END AS December

但是,这会在不同的行上返回所有这些值

NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    208333.00
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    208333.00   NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    208333.00   NULL    NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    208333.00   NULL    NULL    NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    208333.00   NULL    NULL    NULL    NULL
NULL    NULL    NULL    NULL    NULL    NULL    208333.00   NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    NULL    NULL    208333.00   NULL    NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    NULL    208333.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    208333.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
NULL    NULL    208333.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
NULL    208333.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
208333.00   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

有没有办法让它们出现在同一行?谢谢!

【问题讨论】:

  • 仅供参考,您所拥有的是 CASE 表达式,而不是 Case (Switch) 语句。两者完全不同,后者在 SQL Server 中找不到。

标签: sql sql-server tsql case


【解决方案1】:

看起来你想要聚合:

MAX(CASE WHEN month(m.pcp_startdate) = 1 THEN m.pcp_value END) AS January,
MAX(CASE WHEN month(m.pcp_startdate) = 2 THEN m.pcp_value END) AS February,

您可能还需要在查询中调整GROUP BY,但您没有在问题中显示。

【讨论】:

  • 谢谢,已将 CASE 中的两个字段从 group by 中删除,并且成功了!
【解决方案2】:

在我看来就像一个数据透视表?

SELECT
    'amountOutstanding' as [val], [1] as Jan, [2] as Feb, [3] as Mar, [4] as Apr, [5] as May, [6] as Jun, [7] as Jul, [8] as Aug, [9] as Sep, [10] as Oct, [11] as Nov, [12] as Dec
FROM 
( select [amount], [month] from m) as a
PIVOT
(
avg([amount])
FOR [month] in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) as pt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多