Объединить несколько столбцов в один в результирующем запросе

Мне нужна помощь в добавлении нескольких столбцов в один (DB2) после полученного запроса

Мой результирующий запрос выглядит так:

EMPI   HRS  MTS  SDS
-------------------
sam    12   10   10
tukai  10   05   02

Теперь мне нужен этот вывод:

empid   Totaltimetaken
----------------------
sam     12:10:10
tukai   10:05:02

Первый запрос:

SELECT
    empid
    ,TOTALSECONDS/3600 AS HRS
    ,(MOD(TOTALSECONDS, 3600) /60) AS MTS
    ,(MOD(TOTALSECONDS, 60)) AS SDS
FROM 
    (SELECT
        SUM(duration) AS TOTALSECONDS
        ,empid
     FROM table
     GROUP BY empid)

Из приведенного выше результата запроса теперь я хочу добавить столбцы: empid, hrs, mts, sds.

Я использовал этот запрос, но не получил результата. Любая помощь...

SELECT 
    TMP1.emp
    ,('0'||(TOTALSECONDS.TMP1)/3600)||':'||
    ('0'||(MOD(TOTALSECONDS.TMP1),3600)/60) ':'||
    MOD(TOTALSECONDS.TMP1),60) AS TOTALTIMETAKEN
    ,TMP1.TOTALSECONDS
FROM
   (SELECT 
       EMPID emp,
       SUM(DURATION) AS TOTALSECONDS
    FROM table
    GROUP BY EMPID) TMP1

Это для IBM DB2.


person user3657257    schedule 02.06.2014    source источник
comment
Какая БД? SqlServer или DB2?   -  person codingbiz    schedule 02.06.2014
comment
У этого запроса есть дополнительные проблемы: '0' ставится префикс для часов/минут во всех случаях, даже если он уже содержит две цифры, и никогда для секунд (т. е. вы получить такие вещи, как '01:023:0').   -  person Clockwork-Muse    schedule 03.06.2014


Ответы (2)


Вы должны использовать TMP1 в качестве префикса.

SELECT TMP1.emp, TMP1.TOTALSECONDS,
           ('0' || (TMP1.TOTALSECONDS) / 3600) || ':' ||
           ('0' || (MOD(TMP1.TOTALSECONDS, 3600) / 60) ':' ||
           MOD(TMP1.TOTALSECONDS, 60) AS TOTALTIMETAKEN
FROM (SELECT EMPID emp, SUM(DURATION) AS TOTALSECONDS
      FROM table
      GROUP BY EMPID) TMP1
person TMNT2014    schedule 02.06.2014
comment
Спасибо. В нем говорится, что после D(TMP1.TOTALSECONDS) был обнаружен неожиданный токен. Ожидаемые токены могут включать: +. SQLSTATE=42601 - person user3657257; 02.06.2014
comment
Отредактированы лишние скобки в запросе - person TMNT2014; 02.06.2014

Это должно привести вас на правильный путь....

Select One, Two
from Table

приведет к 2 столбцам, которые будут выглядеть как

|One|   |Two|
  1       2

-

 Select Cast(One as varchar(30)) + '_' + Cast(Two as varchar(30)) as 'Concatenated'
 from Table   

результат будет выглядеть

|Concatenated|
     1_2

*Обратите внимание, что это для SQL Server

person CSharper    schedule 02.06.2014
comment
Возможно, потому что + не является поддерживаемым оператором для конкатенации символов, а || (две вертикальной черты)? Или то, что они уже умеют превращаться в персонажа? Посмотрите внимательнее на вопрос - что на самом деле делает запрос... или нет, в данном случае? - person Clockwork-Muse; 04.06.2014