Фильтрация столбцов по значению строки - PullRequest
0 голосов
/ 28 марта 2019

Я вытягиваю набор данных параметров, перечисленных в строках.Эти параметры связаны через исходную последовательность.Одна из строк в данной последовательности имеет строковое значение, перечисленное только для одной строки.Я пытаюсь отфильтровать этот результат и перечислить строковое значение для каждой строки на основе последовательности, вместо того, чтобы иметь одну строку и список оставшихся ролей как нулевой.Можно ли это сделать на стороне отчета SSRS?

пример: пакетная строка встроена в эту конкатенацию.Я также не хочу фильтровать диаметр и твердость, поэтому я не могу фильтровать только по партии.

PAT_ID     ME      STRING_VALUE      NUM_Value  Source_CD_Sequence
Diameter   CDC     Null               9.83            0
Hardness   CDC     Null               17.3            0
ID_Tablet  CDC    20190117-7h40m/1/1  Null            0

SELECT
  PVXMEDE.PAT_ID,
  PVXMEDE.ME,
  PVXMEDE.STRING_VALUE,
  PVXMEDE.NUM_VALUE,
  PVXMEDE.SOURCE_CD_SEQUENCE,
  PVXMEDE.SOURCE_EXECUTION_ID
FROM
  PVXMEDE
   FULL OUTER JOIN PVXMIDE ON (PVXMEDE.SOURCE_EXECUTION_ID=PVXMIDE.SOURCE_EXECUTION_ID AND PVXMEDE.SOURCE_CD_SEQUENCE=PVXMIDE.SOURCE_CD_SEQUENCE AND PVXMEDE.STRING_VALUE=PVXMIDE.STRING_VALUE AND PVXMEDE.DATE_LOCAL=PVXMIDE.DATE_LOCAL)
   RIGHT JOIN PVXME ON (PVXME.ME=PVXMEDE.ME)
   AND PVXMEDE.PAT_ID IN ('THICKNESS', 'WEIGHT', 'DIAMETER', 'HARDNESS', 'ID_TABLET')
Where
PVXME.CX_STRING_4 = '20190117-7h40m'

Ожидаемая фильтрация:

PAT_ID     ME      STRING_VALUE      NUM_Value  Source_CD_Sequence
Diameter   CDC    20190117-7h40m/1/1  9.83            0
Hardness   CDC    20190117-7h40m/1/1  17.3            0
ID_Tablet  CDC    20190117-7h40m/1/1  Null            0

1 Ответ

0 голосов
/ 31 марта 2019

Это может быть легко достигнуто с помощью таблиц CTE - только один из способов сделать это.

, что вы можете сделать, это выбрать отдельную последовательность и строковое значение, где строковое значение не равно нулю, в cte или во временной таблице ... затем, когда у вас есть последний набор данных, присоедините набор данных обратно к временной таблице илиcte на порядковом номере .. и заполните пустые значения строковым значением.имеет смысл?

как то так

if OBJECT_ID ('tempdb..#string_values') is not null
drop table #string_values

;with mycte as ( -- this is the distinct set of sequence and associated string values that are not null
select 1 as sequence , '20190117-7h40m/1/1' as string_value
union all
select 3 as sequence , '20190117-7h40m/2/1' as string_value
union all
select 4 as sequence , '20190117-7h40m/3/1' as string_value
)

select * -- putting everything into a temp table
into 
#string_values

from mycte

-- this is your data set please note that the sequence has been included
;with my_dataset as (
select 'Diameter' as PAT_ID , 'CDC' as ME, null as STRING_VALUE , 9.83 as NUM_value, 0 as  Source_CD_Sequence, 1 as sequence
 union all
 select   'Hardness' as PAT_ID , 'CDC' as ME, null as STRING_VALUE , 17.3 as NUM_value, 0 as  Source_CD_Sequence     , 1 as sequence
 union all
  select   'Hardness' as PAT_ID , 'CDC' as ME, '20190117-7h40m/3/1' as STRING_VALUE , null as NUM_value, 0 as  Source_CD_Sequence     , 1 as sequence


  )

  Select 
  my_dataset.PAT_ID
  ,my_dataset.ME
  ,isnull(my_dataset.STRING_VALUE,string_val.string_value) as STRING_VALUE
  ,my_dataset.NUM_value
  ,my_dataset.Source_CD_Sequence

   from my_dataset

  inner join #string_values string_val
    on string_val.sequence = my_dataset.sequence
...