我有此代码,该代码有效,但我想在临时表中插入来自同一表([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)中获得第二个变量的数据。我该怎么办?
答案 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 在某些情况下,您最终不得不这样做,但首先要耗尽所有可能的基于集合的选项。