2012-06-14 3 views
0

Вот моя ситуация. Мне нужно создать отчет, который показывает каждый открытый порядок работы, а также показывает последнюю дату работы, если таковой существует, и количество прошедших дней с момента последней рабочей даты. Вот представление SQL, который создал набор данных:суммирование строк таблицы ssrs 2008

select segments.date_created, 
     headers.order_number 
     segments.segment_id 
     lines.line_type 
     lines.line_qty * lines.unit_price line_amt, 
     case when lines.line_type = 3 
     then max(clocking.clock_date) 
     else convert(date, '1900-01-01') 
     end last_clock_date, 
     case when lines.line_type = 3 
     then datediff(day, max(clocking.clock_date), getdate()) 
     else datediff(day, convert(date, '1900-01-01'), getdate()) 
     end DALL 
from segments inner join headers on segments.header_id = headers.header_id 
       left join lines on header.header_id = lines.header_id 
       left join clocking on header.header_id = clocking.header_id and 
            segments.segment_id = clocking.segment_id and 
            lines.line_id = clocking.line_id 
where headers.status = 0 
and segments.branch = @branch 
and headers.folder_id in ('400', '401') 
and headers.order_number not like 'WP%' 
group by headers.order_number, segments.segment_id, 
     lines.line_type, segments.date_created, lines.line_qty, 
     lines.unit_price 

Пример вывода является:

date_created order_number segment_id line_type line_amt clock_date DALL 
    2012-05-10 HA025050  1   1   288.58  1900-01-01 41072 
    2012-05-10 HA025050  1   3   81.00  2012-05-10 35 
    2012-05-10 HA025050  2   1   22.90  1900-01-01 41072 
    2012-04-26 W7184315  1   3   1062.50 2012-05-08 37 
    2012-04-26 W7184315  1   1   69.68  1900-01-01 41072 
    2012-04-26 W7184315  1   1   61.96  1900-01-01 41072 
    2012-04-27 W7184357  1   1   682.11  1900-01-01 41072 

Две вещи, чтобы отметить, я глушение дату 1900-01-01 в clock_date для всех линий которые не являются рабочими линиями, т. е. не являются линией 3. В моем отчете я группируюсь по порядку_имя и segment_id.

отчет выходе должен быть:

order_number segment_id amount date_created clock_date DALL 
    HA025050  1   369.58 2012-05-10 2012-05-10 35 
    HA025050  2   22.90 2012-05-10     0 
    W7184315  1   1194.14 2012-04-26 2012-05-08 37 
    W7184357  1   682.11 2012-04-27     0 

      Count: 4 Total: 2268.73      Days: 72  Avg: 18 

Report выход:

order_number segment_id amount date_created clock_date DALL 
    HA025050  1   369.58 2012-05-10 2012-05-10 35 
    HA025050  2   22.90 2012-05-10     0 
    W7184315  1   1194.14 2012-04-26 2012-05-08 37 
    W7184357  1   682.11 2012-04-27     0 

      Count: 4 Total: 2268.73     Days: 205432  Avg: 51358 

Поскольку каждая строка набора данных является строка заказа общая сумма заказа суммирует правильно, однако отчет суммированием все строки набора данных для общего значения DALL, что неверно. Я хочу суммировать только значения DALL, которые появляются в отчете. В выражении для поля DALL я вставляю «0», если clock_date = '1900-01-01'. Мне нужны все строки, потому что диспетчер службы хочет, чтобы все заказы на работу были на нем заняты или нет, и он хочет, чтобы эти заказы представлялись как 0 DALL. У меня уже был разговор с ним о том, как это изменит его результаты, по-видимому, ему нравятся искаженные результаты. Я думаю, что я дал достаточно информации, если вам нужно знать что-нибудь еще, дайте мне знать.

ответ

0

Я понял это некоторое время назад, просто слишком занят, чтобы разместить его здесь. Я думал, так как в SSRS не было способа сделать это, я пошел на SQL. Вместо того, чтобы помещать 1900-01-01 в поле labor_date, я разрешил SQL поместить нуль. Теперь, когда он добавляет все значения null, они игнорируются.

Смежные вопросы