может быть, ваш запрос будет слишком сложным, так что я не уверен, что с помощью with
, которые вы можете использовать его, но я тестировал ниже запроса и здесь the DEMO дает именно то, что вы хотите:
create table query ([ID] int,
[Value] varchar(2),[DateField1] date,
[Val1] decimal(10,2),[Val2] decimal(10,2),
[Val3] decimal(10,2))
insert into query
values(1,'R2','2014-01-01',0.3,3.2,3.1),
(1,'R1','2014-01-02',null,2.2,0.5),
(1,'R2','2014-01-02',0.7,null,null)
with cte
as
(
select * from query -- your query
)
select distinct q.ID,q.DateField1,
isnull(q.val1 ,(select top 1 qq.val1 from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val1 is not null)) val1,
isnull(q.val2,(select top 1 qq.val2 from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val2 is not null)) val2,
isnull(q.val3,(select top 1 qq.val3 from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val3 is not null))val3,
case
when q.val1 is null then (select top 1 qq.value from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val1 is not null)
else q.value end as val1R,
case
when q.val2 is null then (select top 1 qq.value from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val2 is not null)
else q.value end as val2R,
case
when q.val3 is null then (select top 1 qq.value from cte qq
where qq.ID=q.ID and qq.datefield1=q.datefield1
and qq.val3 is not null)
else q.value end as val3R
from cte q
Сообщите больше о расчете/преобразовании значения R. Это поиск или расчет? – shawnt00
Значение R - простой просмотр, никаких расчетов не производится. Столбцы Val1, Val2, Val3 являются фактически поворотными значениями, но для того, чтобы отображать эту информацию для пользователя, мне нужна одна строка на DateField. Предполагается, что значения R помогают цветовому кодированию информации для столбцов Val1, Val2, Val3 на странице отображения. – RizJa
По какой-то причине я даже не видел эту вторую колонку. – shawnt00