Как я могу получить всего 1 раз для нескольких строк - PullRequest
1 голос
/ 01 марта 2012

Меня попросили изменить отчет (который, к сожалению, был написан ужасно !! не мной!), Чтобы он включал количество дней.Обратите внимание, что «Дни» не рассчитываются с использованием «StartDate» и «EndDate» ниже.Проблема в том, что на одну запись приходится несколько строк (пользователи хотят видеть детали для начала и конца), поэтому мой итог для «Дней» рассчитывается для каждой строки.Как я могу получить итоговый 1 раз без повторения итогов в столбце?

Вот как сейчас выглядят данные:

ID          Description     startdate   enddate        Days
REA145681   Emergency       11/17/2011  11/19/2011      49
REA145681   Emergency       12/6/2011   12/9/2011       49
REA145681   Emergency       12/10/2011  12/14/2011      49

REA146425   Emergency       11/23/2011  12/8/2011       54
REA146425   Emergency       12/9/2011   12/12/2011      54

Мне нужно это:

ID          Description     startdate   enddate        Days
REA145681   Emergency       11/17/2011  11/19/2011      49
REA145681   Emergency       12/6/2011   12/9/2011       
REA145681   Emergency       12/10/2011  12/14/2011      

REA146425   Emergency       11/23/2011  12/8/2011       54
REA146425   Emergency       12/9/2011   12/12/2011     

Помогите, пожалуйста.Вот как пользователи хотят видеть данные.Заранее спасибо!

Лиз

--- Вот упрощенный запрос:

    select id
,description
,startdate     -- users want to see all start dates and enddates
,enddate
,days = datediff(d,Isnull(actualstardate,anticipatedstartdate) ,actualenddate) 
    from table

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Поскольку вы не предоставили данные своих таблиц, я оперирую вашим результатом, как если бы он был таблицей.Это приведет к тому, что вы ищете:

select *, 
  case row_number() over (partition by id order by id)
    when 1 then days
  end
from t

Редактировать:

Похоже, вы ДЕЙСТВИТЕЛЬНО добавили некоторый код SQL.Это должно быть то, что вы ищете:

select *, 
  case row_number() over (partition by id order by id)
    when 1 then
      datediff(d,Isnull(actualstardate,anticipatedstartdate) ,actualenddate)
  end
from t
0 голосов
/ 01 марта 2012

Таким образом, они хотят, чтобы выходные данные были точно такими же, за исключением того, что они не хотят видеть дни, перечисленные несколько раз для каждого значения ID? И они очень рады видеть ID и описание несколько раз, но значение Days раздражает их?

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

Подавление избыточных вхождений значения Days больше зависит от использования правильного инструмента. Я не знаком с текущими инструментами, но в прошлый раз QMF был очень хорош для такого рода вещей. Если столбец был основой для прерывания элемента управления, вы могли бы фактически выбрать опцию для этого столбца, которая указала бы ему не повторять значение прерывания элемента управления повторно. Таким образом, вы можете избежать повторения идентификатора, описания и дней, если вы этого хотите. Но я не знаю, используют ли люди все еще QMF, и я понятия не имею, используете ли вы. И если цена не упала, вы не захотите выходить и покупать QMF только для того, чтобы подавить эти избыточные значения.

Другие инструменты могут делать то же самое, но я не могу сказать вам, какие из них. Возможно, инструмент, который вы используете для составления отчетов - Crystal Reports или что-то еще - имеет эту функцию. Или нет. Я думаю, что это называется Outlining в QMF, но у вашего инструмента может быть другое имя.

Теперь, если этот отчет генерируется прикладной программой, то это другой чайник Fish. Приложение может справиться с этим довольно хорошо. Но большинство людей используют инструменты отчетности для конечных пользователей, чтобы делать подобные вещи, чтобы избежать больших затрат, связанных с написанием программ.

Мы могли бы помочь вам в дальнейшем, если вы укажете, какой инструмент вы используете для создания этого отчета.

0 голосов
/ 01 марта 2012

Это задача для инструмента отчетности.Вам нужно будет написать что-то вроде следующего кода в поле «Свойства отображения поля дней»:

if RowNumber > 1 AND id = previous_row(id) 
  then -- hide the value of Days
       Colour = BackgroundColour
       Days = NULL
       Days = ' '
       Display = false
       ... (anything that works)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...