Возврат нескольких операторов в одной строке в T- SQL - PullRequest
0 голосов
/ 14 февраля 2020

Я использую следующий оператор 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

Is Есть ли способ заставить их появляться в одном ряду? Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 февраля 2020

Похоже, что вы хотите агрегации:

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 в вашем запросе, но вы не показываете это в своем вопросе.

0 голосов
/ 14 февраля 2020

выглядит для меня как сводная таблица?

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;
...