Kann ich Operationen (SUM, AVG usw.) für eine Tabelle ausführen, die von einer gespeicherten Prozedur in T-SQL zurückgegeben wird?Operationen über eine Stored Procedure-Tabelle SQL
Hier meine SP-Code:
exec CC_SP_ReadTags
'11', '2016-12-07 00:00:00', '2016-12-07 23:00:00','','Timestamp ASC','TIMESTEP=60,2'
Damit erhalte ich diese Tabelle:
Die im Bereich Realvalue gespeicherten Daten sind varchar und ich möchte die AVG tun auf sie, ist es irgendwie möglich? Ich habe alle diese Befehle versucht, aber ohne Erfolg:
select AVG(RealValue)
SELECT CAST(RealValue AS INT)
SELECT CONVERT(INT, RealValue)
Jede Hilfe ist willkommen danke Ihnen allen.
Hier ist der SP-Code:
USE CC_SIR_16_07_29_11_30_35R
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[CC_SP_ReadTags]
(
@List varchar(1000),
@TimeBegin varchar(32),
@TimeEnd varchar(32),
@WHEREClause varchar(1000)= NULL,
@ORDERBYClause varchar(1000) = NULL,
@Timestep varchar(500) = NULL,
@Aggregationmode int = 0,
@SymDataSource varchar(512) = NULL,
@SymCatalog varchar(512) = NULL,
@LS_Name varchar(255)=NULL
)
WITH encryption
AS
BEGIN
SET NOCOUNT ON
--DECLARE @LS_Name varchar(255)
DECLARE @Catalogname varchar(255)
DECLARE @Internal_LS bit
DECLARE @NoTime bit
SET @Internal_LS = 0
-- check valid datetime or Aggregationmode = 0
DECLARE @ret int
SET @ret = ISDATE(@TimeBegin)
IF (@ret = 0 and @Aggregationmode <> 0)
RETURN
IF ISNULL(@LS_Name,'') = ''
BEGIN
SET @LS_Name = 'CA_'+ CAST(@@SPID as varchar(10))
SET @Catalogname = DB_NAME()
if @SymDataSource = NULL
set @SymDataSource = 'Hallo'
if ISNULL(@SymDataSource,'') = '' or ISNULL(@SymCatalog,'') = ''
BEGIN
EXEC sp_addlinkedserver @server = @LS_Name,@srvproduct = 'CommonArchiving', @provider = 'WinCCOLEDBProvider', @datasrc = @@servername, @catalog = @CatalogName
set @Internal_LS = 1
END
ELSE
BEGIN
EXEC sp_addlinkedserver @server = @LS_Name,@srvproduct = 'CommonArchiving', @provider = 'WinCCOLEDBProvider', @datasrc = @SymDataSource, @catalog = @SymCatalog
set @Internal_LS = 1
END
END
DECLARE @Statement varchar(8000)
SET @Statement = ''
SET @Statement = 'SELECT * FROM OPENQUERY('[email protected]_Name+',''Tag:R,('[email protected]+'),'''''[email protected]+''''','''''[email protected]+''''''
IF(LEN(@TimeStep) <> 0)
BEGIN
SET @Statement = @Statement + ',' + @Timestep + ',' + CAST(@Aggregationmode AS VARCHAR(6))
END
SET @Statement = @Statement + ' '') '
IF(LEN(@WHEREClause) <> 0)
BEGIN
SET @Statement = @Statement + @WHEREClause
END
IF(LEN(@ORDERBYClause) <> 0)
BEGIN
SET @Statement = @Statement + ' ORDER BY ' + @ORDERBYClause
END
--print @Statement
BEGIN
EXEC(@Statement)
END
if @Internal_LS = 1
BEGIN
EXEC sp_dropserver @server = @LS_Name
set @LS_Name = NULL
END
SET NOCOUNT OFF
END
GO
Warum willst du ein 'Int'? Möchten Sie in diesem Fall nicht "Dezimal" verwenden? – christiandev
Ja auch Dezimal ist in Ordnung, aber es funktioniert nicht –
Ich habe Ihnen ein Beispiel mit Dezimal angegeben. – christiandev