Использовать оператор inter как группу

Мне сложно найти слова, чтобы описать мою проблему, поэтому Google не приносит никаких результатов. Извините за то, что (возможно) очень простой вопрос.

В принципе, я хочу иметь две строки, каждая из которых создается индивидуально между операторами. Я пробовал использовать оператор «AS», как я бы в Select, но это просто дает мне синтаксическую ошибку.

Вот мой код:

Select      WEEK_ID,
            SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252') --Use 'as' statement here?
            Or (WEEK_ID Between '201101' And '201152')
Group By    WEEK_ID

В основном я пытаюсь понять, как сделать

WEEK_ID Between '201201' And '201252'

свернуть в одну строку под названием «2012». Как я уже сказал, все, что я пробовал, это

(WEEK_ID Между '201201' и '201252) Как «2012»

Есть предположения? Любые учебники, на которые кто-то хочет навестить меня? Любые оскорбления за то, что они не знали ответа на предположительно основной вопрос?

3
nl ja de
что-то вроде group by substr (week_id, 0, 4) , каков бы ни был ваш эквивалент db функции подстроки?
добавлено автор Marc B, источник

3 ответы

Попробуйте взять первые 4 символа и группировать их вместо этого:

Select      LEFT(WEEK_ID,4) AS Year,
            SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252') --Use 'as' statement here?
            Or (WEEK_ID Between '201101' And '201152')
Group By    LEFT(WEEK_ID,4)

Преимущество в том, что LEFT является ANSI, поэтому он должен работать во всех rdbms

6
добавлено
Действительно ли ОП задает вопрос о подстройке? Мне кажется, что он хочет, чтобы он называл набор столбцов.
добавлено автор Woot4Moo, источник
+1. , , Но вы действительно должны называть left (week_id, 4) year , а не week .
добавлено автор Gordon Linoff, источник
Я прочитал строку - обрушился на одну строку под названием «2012» - поскольку он хочет только один ряд в 2012 году, а не отдельный столбец, чтобы указать год
добавлено автор twoleggedhorse, источник
Это решение действительно выполняет свою работу. Это не так, как я бы предпочел, но неважно :-).
добавлено автор Jay Carr, источник
И ты был бы прав. Один ряд на 2011 год один на 2012 год.
добавлено автор Jay Carr, источник

Похоже, вам нужен отчет о делах

http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.sqlref%2Fpsmcse.htm

select
    case when week_id between '201201' and '201252'
              then '2012'
          when week_id between '201101' and '201152'
              then '2011'
     end as 'year'
        SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252')
        Or (WEEK_ID Between '201101' And '201152')
Group By 
     case when week_id between '201201' and '201252'
              then '2012'
          when week_id between '201101' and '201152'
              then '2011'
     end
2
добавлено
Вы можете группировать оператор case, если он находится в вашем выборе, но не использует псевдоним в группировке. SELECT CASE x END AS 'Year' FROM y GROUP BY CASE x END. CASE - это не ANSI, поэтому вам сначала нужно сначала проверить у своего поставщика RDBMS
добавлено автор twoleggedhorse, источник
CASE здесь разделяет значения на новые столбцы , а не строки , как задает вопрос.
добавлено автор WarrenT, источник
Я не очень хорошо знаком с операторами Case в SQL. Я думаю, мне нужно будет прочитать это, так как это, вероятно, окажется полезным.
добавлено автор Jay Carr, источник

Что касается «любых мыслей», я бы предложил вам просто изучить предложение GROUP BY и концепцию агрегатов SQL.

Если вы хотите объединить все недели года, то вы не хотите выбрать или сгруппировать по WEEK_ID (вам нужно сгруппировать по год ).

1
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)