在临时表中插入值的形式相同的表和不同的变量

时间:2018-08-16 09:13:20

标签: sql-server reportbuilder3.0

我有此代码,该代码有效,但我想在临时表中插入来自同一表([Runtime]。[dbo])中另一个变量(UBB_PreT_Line_LA.If_TotalInFeddWeight)的相同值(DateTime和Value)。 [历史])。然后,在表的SQL Report Builder 3.0中显示结果。

SET NOCOUNT ON
DECLARE @fechaItem DATETIME;
DECLARE @fechaFinTotal DATETIME;
SET @fechaItem = DateAdd(hh,7,@Fecha)
SET @fechaFinTotal =  DateAdd(hh,23,@Fecha)
SET NOCOUNT OFF

DECLARE @tblTotales TABLE
(
VALOR_FECHA DATETIME,
VALOR_VALUE float
)

WHILE @fechaItem < @fechaFinTotal
BEGIN   

DECLARE @fechaFin DATETIME;
SET @fechaFin =  DATEADD(minute, 15, @fechaItem );

INSERT INTO @tblTotales
SELECT 
MAX( [DateTime] ), 
MAX( [Value] )
FROM [Runtime].[dbo].[History]
WHERE 
[DateTime] >= @fechaItem  
AND [DateTime] <= @fechaFin
AND (History.TagName='UBB_PreT_Belt_PF101A.Time_Running')

SET @fechaItem = @fechaFin;

END

SELECT TOP 64 VALOR_FECHA as Fecha,VALOR_VALUE as Valor
FROM @tblTotales
order by Valor ASC

我想要的是,使用同一个查询将我在这两个表中得到的结果加入一个查询中,其中仅查询的变量发生变化。

目的是在报表生成器中创建一个唯一的数据集,以在单个表中显示图像的两个表的数据。 15分钟的间隔是因为我只想显示每15分钟的值变化。 enter image description here

我修改了代码(Image_02),并使用报表生成器的查询设计器获得了Image_03中显示的内容。最终目标是在右边的另外两列(Fecha_Ton和Valor_Ton)中获得第二个变量的数据。我该怎么办?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,我认为此查询将完全替换您的代码(并添加第二个值):

declare @sample table (Datetime datetime not null, Value int not null, 
                       TagName varchar(50) not null)
insert into @sample (DateTime, Value, TagName) values
('2018-08-16T10:14:00',6,'UBB_PreT_Belt_PF101A.Time_Running'),
('2018-08-16T10:08:00',8,'UBB_PreT_Belt_PF101A.Time_Running'),
('2018-08-16T10:23:00',7,'UBB_PreT_Belt_PF101A.Time_Running'),
('2018-08-16T10:07:00',7,'UBB_PreT_Line_LA.If_TotalInFeddWeight')

declare @Fecha datetime
set @Fecha = '20180816'

select
    MAX(DateTime),
    MAX(CASE WHEN TagName='UBB_PreT_Line_LA.If_TotalInFeddWeight' THEN Value END) as Fed,
    MAX(CASE WHEN TagName='UBB_PreT_Belt_PF101A.Time_Running' THEN Value END) as Running
from
    @sample
where
    DateTime >= DATEADD(hour,7,@Fecha) and
    DateTime < DATEADD(hour,23,@Fecha) and
    TagName in ('UBB_PreT_Line_LA.If_TotalInFeddWeight',
                'UBB_PreT_Belt_PF101A.Time_Running')
group by DATEADD(minute,((DATEDIFF(minute,0,DateTime)/15)*15),0)
order by MAX(DateTime) asc

结果:

                        Fed         Running
----------------------- ----------- -----------
2018-08-16 10:14:00.000 7           8
2018-08-16 10:23:00.000 NULL        7

(您可能希望使用CASE作为值,遵循同一模式的两个单独的日期)

您不应该在row by agonising row 1 上建立数据,您应该找到一种表达(整个上方)结果的方式(例如上述方式)集应该看起来像一个查询。让SQL Server本身通过按日期顺序搜索行等来决定是否要这样做。


1 在某些情况下,您最终不得不这样做,但首先要耗尽所有可能的基于集合的选项。