Мне было интересно, можно ли зацикливать внутри оператора sql. В моем случае у меня было два года, которые я создал для тестирования. Теперь я хочу динамически создавать годы, потому что у меня может быть более двух записей. Вот мой код, который я использовал для целей тестирования:Cfloop в заявлении sql?
Select sum(case when quarter = '2015' then 1 else 0 end) as year2015,
sum(case when quarter = '2016' then 1 else 0 end) as year2016
From testTable
Теперь у меня есть cfloop, что дает мне лет, как 2015, 2016, 2017, ... Так что я пытался что-то вроде этого, но это не сработало:
Select
<cfloop from="#startYear#" to="#endYear#" step="1" index="i">
sum(case when quarter = i then 1 else 0 end) as CONCAT('year',i)
</cfloop>
From testTable
сообщение об ошибке:
[Macromedia] [SQLServer JDBC Driver] [SQLServer] Неправильный синтаксис около 'год'.
Я не уверен, что это лучший способ сделать это, если кто-нибудь может помочь, пожалуйста, дайте мне знать.
попробуйте эту 'sum (case when quarter = '# i #' then 1 else 0 end) в качестве года # i #'. Вам также понадобится запятая, но последняя будет действительной SQL. Также я думаю, что вы можете просто «подсчитать количество (квартал) как итог, квартал от группы testTable по кварталу» в зависимости от того, какой результат вы ожидаете. –
Так что и как я должен обрабатывать запятую на конце? Если у меня есть только один год, мне не понадобится запятая, если у меня есть 2 и более, мне нужно? –
Не думайте что-нибудь для PIVOT или UNPIVOT? –