Member 13288167 Ответов: 2

Может ли кто-нибудь дать необходимый запрос для Беллоу?


logTable
=================
ПАКЕТНАЯ ДАТА EXEC-ПРОДОЛЖИТЕЛЬНОСТЬ
--------------------------------
B1 1/JAN/2017 80 сек
B2 1/JAN/2017 40 сек
B1 2/JAN/2017 20 сек
B2 2/JAN/2017 50 сек
.
.
.

о/р:

ПАРТИЯ 1/2 ЯНВАРЯ/ЯНВАРЯ .......
B1 80 20
B2 40 50

Что я уже пробовал:

Привет, я хочу получить результат, как указано выше. можно ли дать запрос на это?

CHill60

А что вы пробовали?
Какова схема "таблицы"?

2 Ответов

Рейтинг:
8

itsmypassion

Вы можете динамически генерировать столбцы.ниже приведен код

Create table logtable
(

batch  varchar(5),
date1  DateTime,
Duration  integer)

Insert into logtable values('B1','01-jAN-2017',80),
('B2','01-jAN-2017',40),
('B1','02-jAN-2017',20),
('B2','02-jAN-2017',50)


DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(DATE1) 
                    from logtable 
                    group by date1 
                    order by DATE1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT BATCH,' + @cols + ' from 
             (
                select BATCH, DATE1, DURATION
                from LOGTABLE
            ) x
            pivot 
            (
                sum(DURATION)
                for DATE1 in (' + @cols + ')
            ) p '

execute(@query);


Рейтинг:
1

OriginalGriff

Нет, не совсем так.
Проблема в том, что количество возвращаемых столбцов меняется: иногда 29, иногда 30, 31 или 32 в зависимости от месяца и года. А PIVOT (который вы хотите использовать) работает только с фиксированным количеством столбцов (потому что вы должны явно указать столбцы для использования).

Я бы настоятельно рекомендовал вам работать над этим в своем презентационном коде, а не в SQL.